我正在使用并发和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的默认行为始终应用更改。如果我设置并发控制,则比较我抓取的数据和更新之间是否有变化。但在这种情况下,我的实体的所有属性都具有“无”的并发模式,而不是“固定”。
面对此问题的最佳方式是什么?我的意思是很多次我不想控制并发性,只适用于最后一次修改。例如,我有一个用户表,一个字段是电话号码。我总是想设置我想要更新的电话,而不管其他用户是否修改了我的请求和我的更新之间的寄存器。如果其他用户更改了数据,我会用我的更新覆盖它。
在这种情况下,我没有看到问题,我试图删除数据库中不存在的寄存器,这是我想要的,寄存器不在数据库中。我可以理解更新中的问题,如果我试图修改已被其他用户修改的信息,但是在删除操作中......