ADO.NET Entity Data Model的乐观锁

  • A+
所属分类:.NET技术
摘要

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

因为需要知道数据更新的用户和时间,所以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行的异常。

ADO.NET Entity Data Model的乐观锁

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