Skip to content

Commit 41ad939

Browse files
merge manually pull #143
merge manually pull #143
1 parent d7631c6 commit 41ad939

File tree

4 files changed

+59
-2
lines changed

4 files changed

+59
-2
lines changed

GraphDiff/GraphDiff.Tests.Shared/Models/TestModels.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,26 @@ public class NullableKeyModel
112112
public Guid? Id { get; set; }
113113
}
114114

115+
public class TestNodeForIListMultiAddition : Entity
116+
{
117+
// If you change this to ICollection, then test TestIListOwnedCollectionAdditionDoesNotMultiAdd will pass
118+
public IList<TestSubNodeForIListMultiAddition> SubNodes { get; set; }
119+
}
120+
121+
public class TestSubNodeForIListMultiAddition
122+
{
123+
[Key]
124+
[DatabaseGenerated(DatabaseGeneratedOption.None)]
125+
[Column(Order = 1)]
126+
public int TestNodeForIListMultiAdditionId { get; set; }
127+
[Key]
128+
[DatabaseGenerated(DatabaseGeneratedOption.None)]
129+
[Column(Order = 2)]
130+
public int OtherKeyId { get; set; }
131+
132+
public string Title { get; set; }
133+
}
134+
115135
// Generic Collection models:
116136
public class SimpleTitleModel
117137
{

GraphDiff/GraphDiff.Tests.Shared/TestDbContext.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public class TestDbContext : DbContext
1717
public IDbSet<OneToManyAssociatedModel> OneToManyAssociatedModels { get; set; }
1818
public IDbSet<OneToManyOwnedModel> OneToManyOwnedModels { get; set; }
1919

20+
21+
2022
public IDbSet<MultiKeyModel> MultiKeyModels { get; set; }
2123

2224
public IDbSet<RootEntity> RootEntities { get; set; }
@@ -26,10 +28,14 @@ public class TestDbContext : DbContext
2628
public IDbSet<InternalKeyModel> InternalKeyModels { get; set; }
2729
public IDbSet<NullableKeyModel> NullableKeyModels { get; set; }
2830

29-
protected override void OnModelCreating(DbModelBuilder modelBuilder)
31+
public IDbSet<TestNodeForIListMultiAddition> TestNodesForIListMultiAddition { get; set; }
32+
public IDbSet<TestSubNodeForIListMultiAddition> TestSubNodesForIListMultiAddition { get; set; }
33+
34+
protected override void OnModelCreating(DbModelBuilder modelBuilder)
3035
{
3136
// second tier mappings
3237

38+
modelBuilder.Entity<TestNodeForIListMultiAddition>().HasMany(p => p.SubNodes).WithRequired().HasForeignKey(s => s.TestNodeForIListMultiAdditionId).WillCascadeOnDelete(true);
3339
modelBuilder.Entity<TestNode>().HasOptional(p => p.OneToOneAssociated).WithOptionalPrincipal(p => p.OneParent);
3440
modelBuilder.Entity<TestNode>().HasMany(p => p.OneToManyAssociated).WithOptional(p => p.OneParent);
3541
modelBuilder.Entity<TestNode>().HasOptional(p => p.OneToOneOwned).WithRequired(p => p.OneParent).WillCascadeOnDelete();

GraphDiff/GraphDiff.Tests.Shared/Tests/OwnedCollectionBehaviours.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,35 @@ namespace RefactorThis.GraphDiff.Tests.Tests
1010
[TestClass]
1111
public class OwnedCollectionBehaviours : TestBase
1212
{
13+
[TestMethod]
14+
public void TestIListOwnedCollectionAdditionDoesNotMultiAdd()
15+
{
16+
TestNodeForIListMultiAddition rootNode = new TestNodeForIListMultiAddition()
17+
{
18+
Title = "rootnode",
19+
SubNodes = new List<TestSubNodeForIListMultiAddition>()
20+
};
21+
22+
23+
using (TestDbContext context = new TestDbContext())
24+
{
25+
context.TestNodesForIListMultiAddition.Add(rootNode);
26+
context.SaveChanges();
27+
}
28+
29+
rootNode.SubNodes.Add(new TestSubNodeForIListMultiAddition() { TestNodeForIListMultiAdditionId = rootNode.Id, OtherKeyId = 1, Title = "sub1" });
30+
rootNode.SubNodes.Add(new TestSubNodeForIListMultiAddition() { TestNodeForIListMultiAdditionId = rootNode.Id, OtherKeyId = 2, Title = "sub2" });
31+
32+
using (TestDbContext context = new TestDbContext())
33+
{
34+
var result = context.UpdateGraph(rootNode, mapping => mapping.OwnedCollection(p => p.SubNodes));
35+
36+
Assert.AreEqual(2, result.SubNodes.Count);
37+
Assert.AreEqual(1, result.SubNodes.Count(s => s.Title.Equals("sub1")));
38+
Assert.AreEqual(1, result.SubNodes.Count(s => s.Title.Equals("sub2")));
39+
}
40+
}
41+
1342
[TestMethod]
1443
public void ShouldUpdateItemInOwnedCollection()
1544
{

GraphDiff/GraphDiff.sln

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "GraphDiff.Tests.Shared", "G
2121
EndProject
2222
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphDiff.Tests.NetStandard21", "GraphDiff.Tests.NetStandard21\GraphDiff.Tests.NetStandard21.csproj", "{082C0151-CBE3-476B-B40C-0D909E83D198}"
2323
EndProject
24-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z.EntityFrameworkGraphDiff.labEF6", "Z.EntityFrameworkGraphDiff.labEF6\Z.EntityFrameworkGraphDiff.labEF6.csproj", "{1AD6B94A-4A02-4DD9-8AEB-76AE73A6E20A}"
24+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Z.EntityFrameworkGraphDiff.labEF6", "Z.EntityFrameworkGraphDiff.labEF6\Z.EntityFrameworkGraphDiff.labEF6.csproj", "{1AD6B94A-4A02-4DD9-8AEB-76AE73A6E20A}"
2525
EndProject
2626
Global
2727
GlobalSection(SharedMSBuildProjectFiles) = preSolution
28+
GraphDiff.Tests.Shared\GraphDiff.Tests.Shared.projitems*{082c0151-cbe3-476b-b40c-0d909e83d198}*SharedItemsImports = 5
29+
GraphDiff.Shared\GraphDiff.Shared.projitems*{13fca06a-1cb3-4584-8421-f15730d0a0f7}*SharedItemsImports = 5
2830
GraphDiff.Tests.Shared\GraphDiff.Tests.Shared.projitems*{36762487-8275-440b-8e19-aada325652e4}*SharedItemsImports = 4
2931
GraphDiff.Shared\GraphDiff.Shared.projitems*{c97b2c2c-b005-438b-8d0c-ee3557d03041}*SharedItemsImports = 13
3032
GraphDiff.Shared\GraphDiff.Shared.projitems*{d9725b00-669c-409d-9ab8-c674710c8e5d}*SharedItemsImports = 4

0 commit comments

Comments
 (0)