我正在使用EF Core 3.1,具有以下代码
public void Update()
{
Client client = new Client();
client.ClientId = 1;
client.Name = "New Client 1";
dbContext.Entry<Client>(client).State = EntityState.Modified;
dbContext.Entry<Client>(client).Property(x => x.IdentityNumber).IsModified = false;
dbContext.SaveChanges();
}
产生以下SQL并成功更新列
UPDATE [Client]
SET [Name] = @p0
WHERE [ClientId] = @p1;
SELECT @@ROWCOUNT;
但是,当我更改从数据库中删除的条目ClientId = 4
时,它会产生相同的SQL查询,但会引发以下错误
数据库操作预期会影响1行,但实际上会影响0行。自加载实体以来,数据可能已被修改或删除
错误消息很清楚,但是我不明白为什么它不起作用,因为SQL Server正常工作(受影响的0行),而是抛出此错误。
如何使用EF Core模拟0行受影响的SQL Server行为?
如果行存在然后更新,我不想先查询数据库。上面的代码是一个示例。在我的方法中,我有很多客户端的列表,这些列表需要立即更新,而使用第一个检查是否存在然后再更新需要很长时间。
答案 0 :(得分:0)
如果该行存在,我不想先查询数据库,然后再更新。
这是问题的症结所在,也是导致错误的原因。
我们的方法(我相信是一种常见的方法)是在处理大量数据时使用Dapper,并将EF限制为“加载”->“编辑”->“对单个或很少实体进行保存”操作。