为了账号安全,请及时绑定邮箱和手机立即绑定

Ef 核心不跟踪子集合的更改

Ef 核心不跟踪子集合的更改

C#
慕桂英3389331 2021-10-31 19:13:06
我有这些模型public class WarehouseAllocation{   public int Id { get; set; }   public Warehouse Warehouse { get; set; }   public IList<Dispatch> Dispatches { get; set; }   //---- removed other properties for brevity}public class Dispatch {   public int Id { get; set; }   public IList<DispatchDetail> DispatchDetails { get; set; }   //---- removed other properties for brevity}在数据库上,Dispatch 有一个引用 WarehouseAllocation 表的外键 WarehouseAllocationId。我使用 Fluent API 将模型映射到数据库,如下所示:modelBuilder.Entity<WarehouseAllocation>(m =>{    m.ToTable("WarehouseAllocation");    m.Property(wa => wa.Id).HasColumnName("WarehouseAllocationId")         .ValueGeneratedOnAdd();    m.HasKey(wa => wa.Id);    m.HasOne(wa => wa.Warehouse)        .WithMany()        .HasForeignKey("WarehouseId");    m.HasMany(w => w.Dispatches)        .WithOne();});modelBuilder.Entity<Dispatch>(m =>{    m.ToTable("Dispatch");    m.Property(wa => wa.Id).HasColumnName("DispatchId")         .ValueGeneratedOnAdd();    m.HasKey(wa => wa.Id);});当我调用 时 dbContext.WarehouseAllocations             .Include(w => w.Dispatches)             .ThenInclude(w => w.DispatchDetails).ToList(),Ef 核心检索所有仓库分配及其调度,包括详细信息。问题是当我使用这种方法时:var warehouseAllocation = dbContext.WarehouseAllocations    .Include(w => w.Dispatches)    .ThenInclude(d => d.DispatchDetails)    .SingleOrDefault(w => w.Id == warehouseAllocationId);warehouseAllocation.Dispatches.Add(new Dispatch{   //--including other properties   DispatchDetails = new List<DispatchDetail> {       new DispatchDetail       {          //--other properties       }   }});// call another query that includes WarehouseAllocationdbContext.ChangeTracker.HasChanges() // this is falsedbContext.SaveChanges() // this keeps returning zero为什么没有检测到变化?
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

如果你改变:


 var warehouseAllocation = dbContext.WarehouseAllocations

 .Include(w => w.Dispatches)

 .SingleOrDefault(w => w.Id == warehouseAllocationId);

到:


 var warehouseAllocation = dbContext.WarehouseAllocations

 .Include(w => w.Dispatches)

 .ThenInclude(d => d.DispatchDetail)

 .SingleOrDefault(w => w.Id == warehouseAllocationId);

它应该通知 EF 您希望将 DispatchDetail 包含到其更改跟踪器中。这也DispatchDetail将从数据库中提取w 的所有值。


查看完整回答
反对 回复 2021-10-31
  • 2 回答
  • 0 关注
  • 251 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信