所以,我有这个更新方法
var loanedAsset = await this.DB.Asset
.AsNoTracking()
.Where(Q => model.AssetIds.Contains(Q.AssetId)).ToListAsync();
foreach (var item in loanedAsset)
{
item.IsLoanedBy = model.EmployeeId;
await DB.SaveChangesAsync();
}
但是,数据库中的值没有更新。它仍然为空
我确信我的 item
或 AssetIds
不为空,因为我已经手动检查过。即使在 foreach
中,也分配了 item.IsLoanedBy
,但唯一的问题是,它不会更新数据库
有人可以帮我吗?
最佳答案
首先,从性能角度来看,您应该考虑在 for 循环之后执行 saveChangesAsync ,另一个问题是 .AsNoTracking() ,它会导致 ef 停止跟踪实体,因此当您更新它时,不会跟踪更改,也不会应用更改最好的方法是这样的:
var loanedAsset = await this.DB.Asset
.Where(Q => model.AssetIds.Contains(Q.AssetId)).ToListAsync();
foreach (var item in loanedAsset)
{
item.IsLoanedBy = model.EmployeeId;
this.DB.Asset.Update(item);
this.DB.Entry(item).State=EntityState.Modified;
}
await DB.SaveChangesAsync();
关于asp.net - SaveChangesAsync() 不更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51869568/