我試圖爲EF實現樂觀鎖定模型。我正在嘗試使用表格上的時間戳數據類型的列。無法獲取實體框架來生成DbUpdateConcurrencyException(數據庫優先)
我試着通過修改T4腳本在成員上添加Timestamp
屬性。運行我的測試,看到它不工作,然後我嘗試以相同的方式(通過T4)在同一成員上添加ConcurrencyCheck
屬性。但是,在任何情況下,生成的SQL都不會在更新中使用該成員(如下所示)。我還設置了Concurrency Mode
到Fixed
EDMX設計師的財產。
我可以在更新後的獨立select中看到timestamp列,但不是更新本身。我試過打破SaveChanges()
,更改數據庫記錄並在手動更新後看到時間戳記值發生變化,執行SaveChanges()
行,並且執行正常,但不會引發異常。有什麼我錯過了,是否需要推出自己的時間戳比較代碼,還是我需要進入EF攔截器的世界來更改SQL輸出?謝謝。
生成的SQL:(通過DbContext.Database.Log
登錄)T4後一代成員的
UPDATE [dbo].[Foo]
SET [FooTitle] = @0
WHERE ([FooId] = @1)
SELECT [fooversion]
FROM [dbo].[Foo]
WHERE @@ROWCOUNT > 0 AND [FooId] = @1
的最終版本:
[Timestamp]
[ConcurrencyCheck]
public byte[] fooversion { get; set; }
我試圖讓EF做:
UPDATE [dbo].[Foo]
SET [FooTitle] = @0
WHERE ([FooId] = @1 AND [fooversion] = @2)