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