hal*_*aed 7 entity-framework-core asp.net-core ef-core-2.0
具有一对多关系的两个实体,例如凭证具有许多凭证详细信息,问题是当从相关数据(凭证详细信息)集合中删除一项,然后保存更改时,实体不会从相关表中删除
删除过程如下所示:
var voucher = await _voucherRepository.GetCompleteVoucherAsync(Id);
var item = voucher.VoucherDetails.FirstOrDefault();
voucher.VoucherDetails.Remove(item);
_dbContext.Update(voucher);
await _dbContext.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
模型看起来像:
public class Voucher : BaseEntity
{
public int Id {get; set;}
-----
public ICollection<VoucherDetail> VoucherDetails { get; set; }
}
public class VoucherDetail : BaseEntity
{
public int Id {get; set;}
-----
public int VoucherId { get; set; }
public Voucher Voucher { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是上下文:
builder.HasOne(i => i.Voucher)
.WithMany(i => i.VoucherDetails)
.IsRequired().HasForeignKey(i => i.VoucherId)
.OnDelete(DeleteBehavior.Cascade);
Run Code Online (Sandbox Code Playgroud)
存储库:
public async Task<Voucher> GetCompleteVoucherAsync(int id)
{
return await _dbContext.Vouchers
.Include(i => i.VoucherSource)
.Include(i => i.VoucherDetails)
.ThenInclude(i => i.Assets)
.SingleOrDefaultAsync(s => s.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
通过上述设置,只需直接更新凭证实体,插入和更新过程就可以完美地适用于凭证和/或 VoucherDetails 实体。但从凭证详细信息集合中删除项目似乎不会触发针对凭证详细信息实体的删除语句。
我还缺少什么吗?
编辑 编辑以显示 GetCompleteVoucherAsync 方法的实现
问题是您只是从凭证对象的 VoucherDetails 集合中删除该项目。这与触发 EF 从 DBSet 中删除项目不同。
更改以下行:
voucher.VoucherDetails.Remove(item);
Run Code Online (Sandbox Code Playgroud)
到这一行:
_dbcontext.VoucherDetail.Remove(item);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10443 次 |
最近记录: |