EFdoesnotthrowDbUpdateConcurrencyExceptiondespiteupdateconflicts我正在使用EF6。需要实现并发处理。问题是我什至无法让EF生成异常。我发现的大多数示例似乎都没有使用“分离的实体”,其中DTO被发送到Web客户端,在那里它被更新,然后稍后保存回服务器(这是我的场景)。假设我有公司记录:publicclassCompany{intCompanyId{get;放;}stringCompanyName{得到;放;}1541627290publicbyte[]RowVersion{get;放;1)用户A拉起公司,Id=0,RowVersion是0x0000000000002B0A2)我运行UPDATECompanySETCompanyName='AcmeChanged,Inc.'WHERECompanyId=0UPDATECompanySETCompanyName='AcmeChanged,Inc.'WHERECompanyId=0以模拟其他用户的更改。RowVersion更改为0x0000000000002B0B3)用户A将CompanyName更改为“Acme,TheGreat!”并点击保存(从浏览器)4)公司DTO到达WebAPI服务器,CompanyName="Acme,TheGreat!"和旧的RowVersion=0x0000000000002B0A5)我从数据库中检索公司记录,更新它并保存它:);dbCompany.CompanyName=updatedCompany.CompanyName;dbCompany.RowVersion=updatedCompany.RowVersion;//设置RowVersion为传入的原始RowVersion0x0000000000002B0Atry{DbContext.SaveChanges();}catch(DbUpdateConcurrencyExceptionex){//预期:异常(hbuten确实)抛出}}它只是保存记录并将RowVersion更新为0x0000000000002B0C而不是并发异常。我错过了什么?我需要一种方法来检测更改、删除等,以防止保存脏数据。我想我可以进行自己的检查,但实际对象很复杂,有许多嵌套的子对象(一个或多个级别)。任何关于最佳实践的指示也将不胜感激......我有这个工作。在我的问题的第5步中,我更改了这一行:dbCompany.RowVersion=updatedCompany.RowVersion;为此:Context.Entry(dbCompany).OriginalValues["RowVersion"]=updatedCompany.RowVersion;现在EF试图保存脏数据时抛出DbUpdateConcurrencyException!我正在使用实体框架的抽象,我无权访问EF上下文,但我发现编写updatedCompany.RowVersion.CopyTo(dbCompany.RowVersion,0);解决了问题。以上是C#学习教程:尽管有更新冲突,EF不会抛出所有共享的DbUpdateConcurrencyException内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表侵权,请点击右边联系管理员删除。如需转载请注明出处:
