ADO.NET Entity Data Model的乐观锁


因为需要知道数据更新的用户和时间,所以DB表结构已经设计了【CreateID】【CreateDate】【UpdateID】【UpdateDate】。

网上查到的Sqlserver数据做排他处理有两种方式:

A.Timestamp型/rowversion型。通过加一个这种类型的列,可以简单实现。

B.ConcurrencyCheck。指定列上加上这个属性,更新时会自动比较这个项目的值是否已经被改变。

详细参考:

https://docs.microsoft.com/zh-cn/ef/core/modeling/concurrency?tabs=data-annotations

https://docs.microsoft.com/zh-cn/aspnet/core/data/ef-rp/concurrency?view=aspnetcore-5.0&tabs=visual-studio#conflict-detection-in-ef-core

 

但是在ADO.NET Entity Data Model中,ConcurrencyCheck设置了之后发现不起作用,

·"数据库中的并发标记值将与原始值进行比较"这个比较的SQL没有生成。

最后经过多次测试,发现在ADO.NET Entity Data Model生成的可视化面板中,可以直接指定项目的属性【`同时实行模式】为Fixed就可以了,

Savechanges的时候会比较变更前的值和数据库的值是否一样,如果一样才会将新值更新进去,否则会出一个更新数据为0行的异常。

 因为是对日项目,所以电脑是日文系统,截图就这样了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM