public void Query_subowned() { Seed(); using var context = new QueryFixupContext(); var subDependent1 = context.Set <Order>() .Select(o => o.OrderDetails.BillingAddress) .Include(a => a.OrderDetails.Order).Single(); var subDependent2 = context.Set <Order>() .Select(o => o.OrderDetails.ShippingAddress) .Include(a => a.OrderDetails.Order).Single(); AssertFixup( context, () => { Assert.Equal("BillMe", subDependent1.Street); Assert.Equal("ShipMe", subDependent2.Street); var dependent = subDependent1.OrderDetails; Assert.Same(dependent, subDependent2.OrderDetails); Assert.NotNull(dependent.Order); var principal = dependent.Order; var subDependent1Entry = context.Entry(subDependent1); Assert.Equal(principal.Id, subDependent1Entry.Property("OrderDetailsId").CurrentValue); Assert.Equal(nameof(OrderDetails.BillingAddress), subDependent1Entry.Metadata.DefiningNavigationName); var subDependent2Entry = context.Entry(subDependent2); Assert.Equal(principal.Id, subDependent2Entry.Property("OrderDetailsId").CurrentValue); Assert.Equal(nameof(OrderDetails.ShippingAddress), subDependent2Entry.Metadata.DefiningNavigationName); }); }
public void Query_self_ref_dependent_nav_only_with_existing(EntityState existingState) { Seed(); using var context = new QueryFixupContext(); var newDependent = new WidgetDN { ParentWidgetId = 77 }; context.Entry(newDependent).State = existingState; var widgets = context.Set <WidgetDN>().ToList(); var dependent = widgets.Single(e => e.Id == 78); var principal = widgets.Single(e => e.Id == 77); AssertFixup( context, () => { Assert.Equal(principal.Id, dependent.ParentWidgetId); Assert.Same(principal, dependent.ParentWidget); Assert.Equal(principal.Id, newDependent.ParentWidgetId); Assert.Same(principal, newDependent.ParentWidget); }); }
public void Query_principal_include_dependent_self_ref_unidirectional_with_existing(EntityState existingState) { Seed(); using var context = new QueryFixupContext(); var newDependent = new WidgetPN { ParentWidgetId = 77 }; context.Entry(newDependent).State = existingState; var widgets = context.Set <WidgetPN>().Include(e => e.ChildWidgets).ToList(); var dependent = widgets.Single(e => e.Id == 78); var principal = widgets.Single(e => e.Id == 77); AssertFixup( context, () => { Assert.Equal(principal.Id, dependent.ParentWidgetId); Assert.Contains(dependent, principal.ChildWidgets); Assert.Equal(principal.Id, newDependent.ParentWidgetId); Assert.Contains(newDependent, principal.ChildWidgets); }); }
public void Query_principal_include_dependent_unidirectional_with_existing(EntityState existingState) { Seed(); using var context = new QueryFixupContext(); var newDependent = new ProductPN { CategoryId = 77 }; context.Entry(newDependent).State = existingState; var principal = context.Set <CategoryPN>().Include(e => e.Products).Single(); var dependent = principal.Products.Single(e => e.Id != newDependent.Id); AssertFixup( context, () => { Assert.Equal(principal.Id, dependent.CategoryId); Assert.Contains(dependent, principal.Products); Assert.Equal(principal.Id, newDependent.CategoryId); Assert.Contains(newDependent, principal.Products); }); }
public void Query_dependent_include_principal_unidirectional_with_existing(EntityState existingState) { Seed(); using var context = new QueryFixupContext(); var newDependent = new ProductDN { CategoryId = 77 }; context.Entry(newDependent).State = existingState; var dependent = context.Set <ProductDN>().Include(e => e.Category).Single(); var principal = dependent.Category; AssertFixup( context, () => { Assert.Equal(principal.Id, dependent.CategoryId); Assert.Same(principal, dependent.Category); Assert.Equal(principal.Id, newDependent.CategoryId); Assert.Same(principal, newDependent.Category); }); }
public void Query_ownership_navigations() { Seed(); using var context = new QueryFixupContext(); var principal = context.Set <Order>() .Single(); AssertFixup( context, () => { var dependent = principal.OrderDetails; Assert.Same(principal, dependent.Order); var subDependent1 = dependent.BillingAddress; var subDependent2 = dependent.ShippingAddress; Assert.Same(dependent, subDependent1.OrderDetails); Assert.Same(dependent, subDependent2.OrderDetails); Assert.Equal("BillMe", subDependent1.Street); Assert.Equal("ShipMe", subDependent2.Street); Assert.Equal(4, context.ChangeTracker.Entries().Count()); var principalEntry = context.Entry(principal); Assert.Equal(EntityState.Unchanged, principalEntry.State); var dependentEntry = principalEntry.Reference(p => p.OrderDetails).TargetEntry; Assert.Equal(principal.Id, dependentEntry.Property("OrderId").CurrentValue); Assert.Equal(EntityState.Unchanged, dependentEntry.State); Assert.Equal(nameof(OrderDetails), dependentEntry.Metadata.FindOwnership().PrincipalToDependent.Name); var subDependent1Entry = dependentEntry.Reference(p => p.BillingAddress).TargetEntry; Assert.Equal(principal.Id, subDependent1Entry.Property("OrderDetailsId").CurrentValue); Assert.Equal(EntityState.Unchanged, subDependent1Entry.State); Assert.Equal( typeof(OrderDetails).DisplayName() + "." + nameof(OrderDetails.BillingAddress) + "#" + typeof(Address).ShortDisplayName(), subDependent1Entry.Metadata.Name); var subDependent2Entry = dependentEntry.Reference(p => p.ShippingAddress).TargetEntry; Assert.Equal(principal.Id, subDependent2Entry.Property("OrderDetailsId").CurrentValue); Assert.Equal(EntityState.Unchanged, subDependent2Entry.State); Assert.Equal( typeof(OrderDetails).DisplayName() + "." + nameof(OrderDetails.ShippingAddress) + "#" + typeof(Address).ShortDisplayName(), subDependent2Entry.Metadata.Name); }); }
public void Query_ownership_navigations() { Seed(); using (var context = new QueryFixupContext()) { // TODO: Infer these includes // Issue #2953 var principal = context.Set <Order>() .Include(o => o.OrderDetails.BillingAddress) .Include(o => o.OrderDetails.ShippingAddress) .Single(); AssertFixup( context, () => { var dependent = principal.OrderDetails; Assert.Same(principal, dependent.Order); var subDependent1 = dependent.BillingAddress; var subDependent2 = dependent.ShippingAddress; Assert.Same(dependent, subDependent1.OrderDetails); Assert.Same(dependent, subDependent2.OrderDetails); Assert.Equal("BillMe", subDependent1.Street); Assert.Equal("ShipMe", subDependent2.Street); Assert.Equal(4, context.ChangeTracker.Entries().Count()); var principalEntry = context.Entry(principal); Assert.Equal(EntityState.Unchanged, principalEntry.State); var dependentEntry = principalEntry.Reference(p => p.OrderDetails).TargetEntry; Assert.Equal(principal.Id, dependentEntry.Property("OrderId").CurrentValue); Assert.Equal(EntityState.Unchanged, dependentEntry.State); Assert.Equal(nameof(Order.OrderDetails), dependentEntry.Metadata.DefiningNavigationName); var subDependent1Entry = dependentEntry.Reference(p => p.BillingAddress).TargetEntry; Assert.Equal(principal.Id, subDependent1Entry.Property("OrderDetailsId").CurrentValue); Assert.Equal(EntityState.Unchanged, subDependent1Entry.State); Assert.Equal(nameof(OrderDetails.BillingAddress), subDependent1Entry.Metadata.DefiningNavigationName); var subDependent2Entry = dependentEntry.Reference(p => p.ShippingAddress).TargetEntry; Assert.Equal(principal.Id, subDependent2Entry.Property("OrderDetailsId").CurrentValue); Assert.Equal(EntityState.Unchanged, subDependent2Entry.State); Assert.Equal(nameof(OrderDetails.ShippingAddress), subDependent2Entry.Metadata.DefiningNavigationName); }); } }
public void Query_owned() { Seed(); using var context = new QueryFixupContext(); var owned = context.Set <Order>().Single().OrderDetails; var principal = context.Set <Order>().AsNoTracking().Single(); AssertFixup( context, () => { var dependentEntry = context.Entry(owned); Assert.Equal(principal.Id, dependentEntry.Property("OrderId").CurrentValue); Assert.Equal(nameof(Order.OrderDetails), dependentEntry.Metadata.FindOwnership().PrincipalToDependent.Name); }); }
public void Query_owned() { Seed(); using (var context = new QueryFixupContext()) { var owned = context.Set <Order>().Select(o => o.OrderDetails).Single(); var principal = context.Set <Order>().AsNoTracking().Single(); AssertFixup( context, () => { var dependentEntry = context.Entry(owned); Assert.Equal(principal.Id, dependentEntry.Property("OrderId").CurrentValue); Assert.Equal(nameof(Order.OrderDetails), dependentEntry.Metadata.DefiningNavigationName); }); } }