Index: Application/Ringtoets/src/Application.Ringtoets.Migration.Core/Resources/DatabaseStructure17.1.sql =================================================================== diff -u -r7a4c657ec5fdedf42347b2f46f7b8b2d5b16db2f -r97c9190ed248b48cdec74d092f53ef28e8ad4530 --- Application/Ringtoets/src/Application.Ringtoets.Migration.Core/Resources/DatabaseStructure17.1.sql (.../DatabaseStructure17.1.sql) (revision 7a4c657ec5fdedf42347b2f46f7b8b2d5b16db2f) +++ Application/Ringtoets/src/Application.Ringtoets.Migration.Core/Resources/DatabaseStructure17.1.sql (.../DatabaseStructure17.1.sql) (revision 97c9190ed248b48cdec74d092f53ef28e8ad4530) @@ -1,6 +1,6 @@ /* ---------------------------------------------------- */ /* Generated by Enterprise Architect Version 12.0 */ -/* Created On : 09-Mar-2017 11:11:11 */ +/* Created On : 17-Mar-2017 10:26:22 */ /* DBMS : SQLite */ /* ---------------------------------------------------- */ @@ -548,7 +548,7 @@ 'StochasticSoilModelSegmentPointXml' TEXT NOT NULL, 'Order' INT (4) NOT NULL, CONSTRAINT 'FK_StochasticSoilModelEntity_FailureMechanismEntity' FOREIGN KEY ('FailureMechanismEntityId') REFERENCES 'FailureMechanismEntity' ('FailureMechanismEntityId') ON DELETE Cascade ON UPDATE Cascade, - CONSTRAINT 'UQ_StochasticSoilModelEntity_Name' UNIQUE ('Name') + CONSTRAINT 'UQ_StochasticSoilModelEntity_NameFailureMechanismEntityId' UNIQUE ('Name','FailureMechanismEntityId') ) ; @@ -561,7 +561,8 @@ 'ReferenceLineIntersectionY' REAL, 'PointsXml' TEXT NOT NULL, 'Order' INT (4) NOT NULL, - CONSTRAINT 'FK_SurfaceLineEntity_FailureMechanismEntity' FOREIGN KEY ('FailureMechanismEntityId') REFERENCES 'FailureMechanismEntity' ('FailureMechanismEntityId') ON DELETE Cascade ON UPDATE Cascade + CONSTRAINT 'FK_SurfaceLineEntity_FailureMechanismEntity' FOREIGN KEY ('FailureMechanismEntityId') REFERENCES 'FailureMechanismEntity' ('FailureMechanismEntityId') ON DELETE Cascade ON UPDATE Cascade, + CONSTRAINT 'UQ_SurfaceLineEntity_NameFailureMechanismEntityId' UNIQUE ('Name','FailureMechanismEntityId') ) ; Index: Application/Ringtoets/src/Application.Ringtoets.Migration.Core/Resources/Migration_5_17.1.sql =================================================================== diff -u -r7a4c657ec5fdedf42347b2f46f7b8b2d5b16db2f -r97c9190ed248b48cdec74d092f53ef28e8ad4530 --- Application/Ringtoets/src/Application.Ringtoets.Migration.Core/Resources/Migration_5_17.1.sql (.../Migration_5_17.1.sql) (revision 7a4c657ec5fdedf42347b2f46f7b8b2d5b16db2f) +++ Application/Ringtoets/src/Application.Ringtoets.Migration.Core/Resources/Migration_5_17.1.sql (.../Migration_5_17.1.sql) (revision 97c9190ed248b48cdec74d092f53ef28e8ad4530) @@ -141,7 +141,8 @@ FROM (SELECT *, (SELECT count(*) FROM [SOURCEPROJECT].StochasticSoilModelEntity WHERE SSM.StochasticSoilModelEntityId > StochasticSoilModelEntityId - AND SSM.Name IS Name) as Suffix + AND SSM.Name IS Name + AND SSM.FailuremechanismEntityId = FailuremechanismEntityId) as Suffix FROM [SOURCEPROJECT].StochasticSoilModelEntity SSM); INSERT INTO StochasticSoilProfileEntity SELECT @@ -168,7 +169,8 @@ FROM (SELECT *, (SELECT count(*) FROM [SOURCEPROJECT].SurfaceLineEntity WHERE SL.SurfaceLineEntityId > SurfaceLineEntityId - AND SL.Name IS Name) as Suffix + AND SL.Name IS Name + AND SL.FailuremechanismEntityId = FailuremechanismEntityId) as Suffix FROM [SOURCEPROJECT].SurfaceLineEntity SL); INSERT INTO TechnicalInnovationSectionResultEntity SELECT * FROM [SOURCEPROJECT].TechnicalInnovationSectionResultEntity; INSERT INTO VersionEntity ( Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs =================================================================== diff -u -ra4da96890c5eb0f73300e05256e3e56755334378 -r97c9190ed248b48cdec74d092f53ef28e8ad4530 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision a4da96890c5eb0f73300e05256e3e56755334378) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision 97c9190ed248b48cdec74d092f53ef28e8ad4530) @@ -68,6 +68,37 @@ private DirectoryDisposeHelper directoryDisposeHelper; [Test] + public void SaveProjectAs_DuplicateItemsInProjectSaveAsNewFile_ProjectAsEntitiesInFile() + { + // Setup + RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject(); + RingtoetsProject duplicateProject = RingtoetsProjectTestHelper.GetFullTestProject(); + + AssessmentSection duplicateAssessmentSection = duplicateProject.AssessmentSections.First(); + fullProject.AssessmentSections.Add(duplicateAssessmentSection); + + string ringtoetsFile = GetRandomRingtoetsFile(); + + var storage = new StorageSqLite(); + storage.StageProject(fullProject); + + // Call + RingtoetsProject firstProject = null; + try + { + storage.SaveProjectAs(ringtoetsFile); + firstProject = (RingtoetsProject) storage.LoadProject(ringtoetsFile); + } + catch (Exception exception) + { + Assert.Fail(exception.Message); + } + + // Assert + AssertProjectsAreEqual(fullProject, firstProject); + } + + [Test] public void SaveProjectAs_SaveAsNewFile_ProjectAsEntitiesInBothFiles() { // Setup Index: build/DatabaseStructure.sql =================================================================== diff -u -r40793165416093e9d2fefb6b12acf82fbd8a84c2 -r97c9190ed248b48cdec74d092f53ef28e8ad4530 --- build/DatabaseStructure.sql (.../DatabaseStructure.sql) (revision 40793165416093e9d2fefb6b12acf82fbd8a84c2) +++ build/DatabaseStructure.sql (.../DatabaseStructure.sql) (revision 97c9190ed248b48cdec74d092f53ef28e8ad4530) @@ -1,6 +1,6 @@ /* ---------------------------------------------------- */ /* Generated by Enterprise Architect Version 12.0 */ -/* Created On : 09-Mar-2017 11:11:11 */ +/* Created On : 17-Mar-2017 10:26:22 */ /* DBMS : SQLite */ /* ---------------------------------------------------- */ @@ -548,7 +548,7 @@ 'StochasticSoilModelSegmentPointXml' TEXT NOT NULL, 'Order' INT (4) NOT NULL, CONSTRAINT 'FK_StochasticSoilModelEntity_FailureMechanismEntity' FOREIGN KEY ('FailureMechanismEntityId') REFERENCES 'FailureMechanismEntity' ('FailureMechanismEntityId') ON DELETE Cascade ON UPDATE Cascade, - CONSTRAINT 'UQ_StochasticSoilModelEntity_Name' UNIQUE ('Name') + CONSTRAINT 'UQ_StochasticSoilModelEntity_NameFailureMechanismEntityId' UNIQUE ('Name','FailureMechanismEntityId') ) ; @@ -561,7 +561,8 @@ 'ReferenceLineIntersectionY' REAL, 'PointsXml' TEXT NOT NULL, 'Order' INT (4) NOT NULL, - CONSTRAINT 'FK_SurfaceLineEntity_FailureMechanismEntity' FOREIGN KEY ('FailureMechanismEntityId') REFERENCES 'FailureMechanismEntity' ('FailureMechanismEntityId') ON DELETE Cascade ON UPDATE Cascade + CONSTRAINT 'FK_SurfaceLineEntity_FailureMechanismEntity' FOREIGN KEY ('FailureMechanismEntityId') REFERENCES 'FailureMechanismEntity' ('FailureMechanismEntityId') ON DELETE Cascade ON UPDATE Cascade, + CONSTRAINT 'UQ_SurfaceLineEntity_NameFailureMechanismEntityId' UNIQUE ('Name','FailureMechanismEntityId') ) ; Index: design/DatabaseDesign.eap =================================================================== diff -u -r40793165416093e9d2fefb6b12acf82fbd8a84c2 -r97c9190ed248b48cdec74d092f53ef28e8ad4530 Binary files differ