我有这些模型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 的所有值。
- 2 回答
- 0 关注
- 251 浏览
添加回答
举报
0/150
提交
取消