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); } }
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)); } }
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); } }