- A+
所属分类:.NET技术
因为需要知道数据更新的用户和时间,所以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行的异常。
因为是对日项目,所以电脑是日文系统,截图就这样了。