C# 如何配置实体,以便导航属性可以包含在查询中,但将从更改跟踪中排除
考虑以下多对多场景:C# 如何配置实体,以便导航属性可以包含在查询中,但将从更改跟踪中排除,c#,entity-framework-core,.net-5,C#,Entity Framework Core,.net 5,考虑以下多对多场景: public class Order { public int OrderId { get; set; } public ICollection<OrderItem> Items { get; set; } } public class Product { public int ProductId { get; set; } } public class OrderItem { public int OrderId { get; set
public class Order
{
public int OrderId { get; set; }
public ICollection<OrderItem> Items { get; set; }
}
public class Product
{
public int ProductId { get; set; }
}
public class OrderItem
{
public int OrderId { get; set; }
public int ItemId { get; set; }
public Product Product { get; set; } // I want this navigation property to be ignored when saving order
}
但我也希望它不被DB上下文跟踪。这意味着,当我添加一些订单时。项目:
void AddItem(Product product)
{
order.Items.Add(new OrderItem
{
ProductId = product.Id,
Product = product
}
}
并调用
dbContext.SaveChanges()
,将忽略OrderItem.Product
属性的任何值。您可以使用AsNotracking告诉实体框架您将负责跟踪查询
您的查询将如下所示:
var order = dbContext.Orders.AsNoTracking()
.Include(o => o.Items).ThenInclude(o => o.Item)
.Find(id);
如果要保存没有产品的订单,只需跟踪订单的更改即可
public async Task AddAsync(Order entity)
{
context.Entry(entity).State = EntityState.Added;
await _ctx.SaveChangesAsync();
}
public async Task AddAsync(Order entity)
{
context.Entry(entity).State = EntityState.Added;
await _ctx.SaveChangesAsync();
}