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"
                 }
             }
         }
     };
 }
Exemplo n.º 2
0
        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");
            }
        }