EF Core HasComputedColumnSql - 在插入/更新或SQL Server / AzureSQL上的每個查詢上計算?

entity-framework-core sql-server

我看到有關此事的相互矛盾的信息。 LearnEntityFrameworkCore.com說你可以寫

.HasComputedColumnSql("GetUtcDate()");

每當創建或更新行時,數據庫的GetUtcDate()方法都會生成列的值

但是,在SQL Server上的計算列的technet文檔中,它說:

每次在查詢中引用它們時,都會重新計算它們的值。

一般承認的答案

好問題。從EF Core文檔中不清楚HasComputedColumnSql代表什麼類型的計算列。可能因為它是關係擴展的一部分,因此被認為是提供者特定的。但由於它沒有配置選項,我同意應該指定行為。

使用SQL Server進行快速測試表明創建的列沒有物理存儲(沒有使用PERSISTED選項),實際上它不能,因為GetUtcDate不是確定性的。因此,來自第一個鏈接的LastModified示例不正確 - 該列將在任何時候被讀取時重新計算,因此它不能用於所需的意圖,應該創建為普通列並由代碼更新。

看起來EF Core中的預期用法是允許基於其他列(如FullName或使用數據庫特定轉換函數進行簡單計算,數據未正確存儲(例如數據/日期時間數據存儲為文本)等。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow