因為需要知道數據更新的用戶和時間,所以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行的異常。
因為是對日項目,所以電腦是日文系統,截圖就這樣了。