当我尝试删除数据库中不存在的寄存器时,我收到异常

时间:2012-05-27 15:11:18

标签: entity-framework concurrency

我正在使用并发和Entity Framework 4.0进行一些测试。我正在做以下两个用户:

用户1加载寄存器 用户2加载寄存器 用户2删除一个寄存器 用户1尝试删除已被客户端2删除的相同寄存器。

我使用的代码如下:

using(Context myContext = new Context))
{
Users myUser = new Users { IDUser = paramUser.IDUser };
myContext.Users.Attach(myUser);
myContext.Users.DeleteObject(myUser);
miContext.SaveChanges();
}

当用户1尝试删除该寄存器时,会出现以下异常:“存储更新,插入或删除语句影响了意外的行数(0)。实体可能已被修改或删除,因为实体已加载。 ObjectStateManager条目“。

我知道这是并发问题,但我认为EF的默认行为始终应用更改。如果我设置并发控制,则比较我抓取的数据和更新之间是否有变化。但在这种情况下,我的实体的所有属性都具有“无”的并发模式,而不是“固定”。

面对此问题的最佳方式是什么?我的意思是很多次我不想控制并发性,只适用于最后一次修改。例如,我有一个用户表,一个字段是电话号码。我总是想设置我想要更新的电话,而不管其他用户是否修改了我的请求和我的更新之间的寄存器。如果其他用户更改了数据,我会用我的更新覆盖它。

在这种情况下,我没有看到问题,我试图删除数据库中不存在的寄存器,这是我想要的,寄存器不在数据库中。我可以理解更新中的问题,如果我试图修改已被其他用户修改的信息,但是在删除操作中......

0 个答案:

没有答案