public void Init() { // setup _oneToOneAssociated = new OneToOneOneToOneAssociatedModel { Title = "Associated Update" }; _oneToManyAssociated = new OneToOneOneToManyAssociatedModel { Title = "Many Associated Update" }; _node = new TestNode { Title = "New Node", OneToOneOwned = new OneToOneOwnedModel { OneToOneOneToOneAssociated = new OneToOneOneToOneAssociatedModel { Title = "Hello" }, OneToOneOneToOneOwned = new OneToOneOneToOneOwnedModel { Title = "Hello" }, OneToOneOneToManyAssociated = new List <OneToOneOneToManyAssociatedModel> { new OneToOneOneToManyAssociatedModel { Title = "Hello" }, new OneToOneOneToManyAssociatedModel { Title = "Hello" } }, OneToOneOneToManyOwned = new List <OneToOneOneToManyOwnedModel> { new OneToOneOneToManyOwnedModel { Title = "Hello" }, new OneToOneOneToManyOwnedModel { Title = "Hello" }, new OneToOneOneToManyOwnedModel { Title = "Hello" } } } }; }
public void ShouldSupportOwnedEntityWithNestedModels() { // setup var oneToOneAssociated = new OneToOneOneToOneAssociatedModel { Title = "Associated Update" }; var oneToManyAssociated = new OneToOneOneToManyAssociatedModel { Title = "Many Associated Update" }; var node1 = new TestNode { Title = "New Node", OneToOneOwned = new OneToOneOwnedModel { OneToOneOneToOneAssociated = new OneToOneOneToOneAssociatedModel { Title = "Hello" }, OneToOneOneToOneOwned = new OneToOneOneToOneOwnedModel { Title = "Hello" }, OneToOneOneToManyAssociated = new List <OneToOneOneToManyAssociatedModel> { new OneToOneOneToManyAssociatedModel { Title = "Hello" }, new OneToOneOneToManyAssociatedModel { Title = "Hello" } }, OneToOneOneToManyOwned = new List <OneToOneOneToManyOwnedModel> { new OneToOneOneToManyOwnedModel { Title = "Hello" }, new OneToOneOneToManyOwnedModel { Title = "Hello" }, new OneToOneOneToManyOwnedModel { Title = "Hello" } } } }; using (var context = new TestDbContext()) { context.Set <OneToOneOneToOneAssociatedModel>().Add(oneToOneAssociated); context.Set <OneToOneOneToManyAssociatedModel>().Add(oneToManyAssociated); context.Nodes.Add(node1); context.SaveChanges(); } // Simulate detach // change node1.OneToOneOwned.OneToOneOneToOneOwned.Title = "Updated"; node1.OneToOneOwned.OneToOneOneToOneAssociated = oneToOneAssociated; var owned = node1.OneToOneOwned.OneToOneOneToManyOwned; owned.Remove(owned.First()); owned.First().Title = "Updated"; owned.Skip(1).First().Title = "Updated 2"; owned.Add(new OneToOneOneToManyOwnedModel { Title = "A new one" }); var associated = node1.OneToOneOwned.OneToOneOneToManyAssociated; associated.Remove(associated.First()); associated.Add(oneToManyAssociated); using (var context = new TestDbContext()) { // Setup mapping context.UpdateGraph(node1, map => map .OwnedEntity(p => p.OneToOneOwned, with => with .OwnedEntity(p => p.OneToOneOneToOneOwned) .AssociatedEntity(p => p.OneToOneOneToOneAssociated) .OwnedCollection(p => p.OneToOneOneToManyOwned) .AssociatedCollection(p => p.OneToOneOneToManyAssociated))); context.SaveChanges(); var updated = context.Set <OneToOneOwnedModel>().Single(); Assert.IsNotNull(updated); Assert.IsTrue(updated.OneToOneOneToOneOwned.Title == "Updated"); Assert.IsTrue(updated.OneToOneOneToOneAssociated.Title == "Associated Update"); var ownershipList = updated.OneToOneOneToManyOwned.ToList(); Assert.IsTrue(ownershipList.Count == 3); Assert.IsTrue(ownershipList[0].Title == "Updated"); Assert.IsTrue(ownershipList[1].Title == "Updated 2"); Assert.IsTrue(ownershipList[2].Title == "A new one"); var associatedList = updated.OneToOneOneToManyAssociated.ToList(); Assert.IsTrue(associatedList.Count == 2); Assert.IsTrue(associatedList[0].Title == "Hello"); Assert.IsTrue(associatedList[1].Title == "Many Associated Update"); } }