Esempio n. 1
0
        public void ShouldRemoveAssociateWithRequiredAssociateIfRequiredIsNotSet()
        {
            var targetRequired = new RequiredAssociate();
            var sourceRequired = new RequiredAssociate();
            var source         = new RootEntity();
            var target         = new RootEntity();

            using (var context = new TestDbContext())
            {
                context.RequiredAssociates.Add(targetRequired);
                context.RequiredAssociates.Add(sourceRequired);

                context.RootEntities.Add(source);
                source.RequiredAssociate = sourceRequired;

                context.RootEntities.Add(target);
                target.RequiredAssociate = targetRequired;
                target.Sources           = new List <RootEntity> {
                    source
                };

                context.SaveChanges();
            }

            target.Sources.Remove(source);

            int expectedSourceId         = source.Id;
            int expectedTargetId         = target.Id;
            int expectedTargetRequiredId = targetRequired.Id;

            using (var context = new TestDbContext())
            {
                context.UpdateGraph(target, map => map.AssociatedCollection(c => c.Sources).AssociatedEntity(c => c.RequiredAssociate));
                context.SaveChanges();

                Assert.IsNotNull(context.RequiredAssociates.FirstOrDefault(p => p.Id == expectedTargetRequiredId));
                Assert.IsNotNull(context.RootEntities.FirstOrDefault(p => p.Id == expectedSourceId));

                var targetReloaded = context.RootEntities.Include("Sources").FirstOrDefault(c => c.Id == expectedTargetId);
                Assert.IsNotNull(targetReloaded);
                Assert.AreEqual(0, targetReloaded.Sources.Count);
            }
        }
Esempio n. 2
0
        public void ShouldAddTwoAssociatesWithSharedRequiredAssociate()
        {
            var root = new RootEntity {
                RequiredAssociate = new RequiredAssociate(), Sources = new List <RootEntity>()
            };
            var requiredAssociate = new RequiredAssociate();
            var associateOne      = new RootEntity {
                RequiredAssociate = requiredAssociate
            };
            var associateTwo = new RootEntity {
                RequiredAssociate = requiredAssociate
            };

            using (var context = new TestDbContext())
            {
                context.RootEntities.Add(root);
                context.RootEntities.Add(associateOne);
                context.RootEntities.Add(associateTwo);
                context.RequiredAssociates.Add(requiredAssociate);
                context.SaveChanges();
            } // Simulate detach

            var expectedAssociateId = requiredAssociate.Id;

            root.Sources.Add(associateOne);
            root.Sources.Add(associateTwo);

            using (var context = new TestDbContext())
            {
                root = context.UpdateGraph(root, map => map.AssociatedCollection(r => r.Sources).AssociatedEntity(r => r.RequiredAssociate));
                context.SaveChanges();

                Assert.IsTrue(root.Sources.All(s => s.RequiredAssociate.Id == expectedAssociateId));

                var sourceIds       = root.Sources.Select(s => s.Id).ToArray();
                var sourcesReloaded = context.RootEntities.Where(r => sourceIds.Contains(r.Id)).ToList();
                Assert.IsTrue(sourcesReloaded.All(s => s.RequiredAssociate != null && s.RequiredAssociate.Id == expectedAssociateId));
            }
        }
Esempio n. 3
0
        public void ShouldAddAssociatedWithoutChangingRequiredAssociate()
        {
            var root = new RootEntity {
                RequiredAssociate = new RequiredAssociate(), Sources = new List <RootEntity>()
            };
            var requiredAssociate = new RequiredAssociate();
            var owned             = new RootEntity {
                RequiredAssociate = requiredAssociate
            };

            using (var context = new TestDbContext())
            {
                context.RootEntities.Add(root);
                context.RootEntities.Add(owned);
                context.RequiredAssociates.Add(requiredAssociate);
                context.SaveChanges();
            } // Simulate detach

            var expectedAssociateId = requiredAssociate.Id;

            root.Sources.Add(owned);

            using (var context = new TestDbContext())
            {
                root = context.UpdateGraph(root, map => map.AssociatedCollection(r => r.Sources).AssociatedEntity(r => r.RequiredAssociate));
                context.SaveChanges();

                var ownedAfterSave = root.Sources.FirstOrDefault();
                Assert.IsNotNull(ownedAfterSave);
                Assert.IsNotNull(ownedAfterSave.RequiredAssociate);
                Assert.AreEqual(expectedAssociateId, ownedAfterSave.RequiredAssociate.Id);

                var ownedReloaded = context.RootEntities.Single(r => r.Id == ownedAfterSave.Id);
                Assert.IsNotNull(ownedReloaded.RequiredAssociate);
                Assert.AreEqual(expectedAssociateId, ownedReloaded.RequiredAssociate.Id);
            }
        }