private void Principal_nav_set_bidirectional_impl(EntityState entityState, bool?graph) { using (var context = new FixupContext()) { var principal = new Parent { Id = 77 }; if (graph == null) { context.Entry(principal).State = entityState; } var dependent = new Child { Name = "1" }; principal.Child1 = dependent; if (graph == null) { context.ChangeTracker.DetectChanges(); } else if (graph == true) { context.ChangeTracker.TrackGraph(principal, e => e.Entry.State = entityState); } else { switch (entityState) { case EntityState.Added: context.Add(principal); break; case EntityState.Unchanged: context.Attach(principal); break; case EntityState.Modified: context.Update(principal); break; } } Assert.Equal(2, context.ChangeTracker.Entries().Count()); AssertFixup( context, () => { Assert.Equal(principal.Id, context.Entry(dependent).Property("ParentId").CurrentValue); Assert.Same(dependent, principal.Child1); Assert.Same(principal, dependent.Parent); Assert.Equal(entityState, context.Entry(principal).State); Assert.Equal(graph == null ? EntityState.Added : entityState, context.Entry(dependent).State); }); } }
private void Principal_nav_set_unidirectional_impl(EntityState entityState, bool?graph) { using (var context = new FixupContext()) { var principal = new ParentPN { Id = 77 }; if (graph == null) { context.Entry(principal).State = entityState; } var dependent = new ChildPN { Name = "1" }; principal.Child1 = dependent; var subDependent = new SubChildPN { Name = "1S" }; dependent.SubChild = subDependent; if (graph == null) { context.ChangeTracker.DetectChanges(); } else if (graph == true) { context.ChangeTracker.TrackGraph(principal, e => e.Entry.State = entityState); } else { switch (entityState) { case EntityState.Added: context.Add(principal); break; case EntityState.Unchanged: context.Attach(principal); break; case EntityState.Modified: context.Update(principal); break; } } Assert.Equal(3, context.ChangeTracker.Entries().Count()); AssertFixup( context, () => { Assert.Equal(entityState, context.Entry(principal).State); Assert.Same(dependent, principal.Child1); Assert.Null(principal.Child2); var dependentEntry = context.Entry(dependent); Assert.Equal(principal.Id, dependentEntry.Property("ParentId").CurrentValue); Assert.Equal(graph == null ? EntityState.Added : entityState, dependentEntry.State); Assert.Equal(nameof(ParentPN.Child1), dependentEntry.Metadata.DefiningNavigationName); Assert.Same(subDependent, dependent.SubChild); var subDependentEntry = context.Entry(subDependent); Assert.Equal(principal.Id, subDependentEntry.Property("ChildId").CurrentValue); Assert.Equal(graph == null ? EntityState.Added : entityState, subDependentEntry.State); Assert.Equal(nameof(ChildPN.SubChild), subDependentEntry.Metadata.DefiningNavigationName); }); } }