EF Core 数据库操作引发错误"Data may have been modified or deleted since entities were loaded"



我正在使用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 行为?

如果行存在,我不想先查询数据库,然后再更新。上面的代码是一个示例。在我的方法中,我有许多客户端的列表,我需要一次更新,并且使用第一个检查是否存在然后更新需要很长时间。

如果行存在,我不想先查询数据库,然后再更新。

这是问题的症结和错误的原因。

我们的方法,我相信是一种常见的方法,是在操作大量数据时使用 Dapper,并将 EF 限制为在单个或非常少的实体上加载 -> 编辑 -> Save 操作。

相关内容

最新更新