2012-04-24 69 views
5

我首先使用EF 4.1和數據庫。爲什麼EF數據庫首先不使用getdate()?

示例表:

CREATE TABLE dbo.Product(
    [ID] [int] IDENTITY(1,1) not null, 
    Title nvarchar(200) not null, 
    CreateDate datetime not null default(getdate()), 
) 

當我添加一個新行,我得到DateTime類型溢出異常。

數據庫設置的getdate()無效。

我必須將createdate字段的storeGeneatePattern屬性設置爲Computed

有什麼辦法讓EF自動生成DateTime列而不需要手動設置?

回答

5

沒有EF永遠不會使用你的數據庫的默認。原因是您的實體具有不可空的DateTime屬性。該屬性默認在.NET中分配了默認值1.1.0001。 EF不知道您是否分配了該值,或者它是否爲默認值,因此它總是明確地將此值傳遞給數據庫。如果使用可空類型,則會發生同樣的情況,但在這種情況下,EF將顯式傳遞null。在這兩種情況下,來自數據庫的默認值都不會被應用,因爲只有在應用程序的值未在插入命令中顯式傳遞時才應用該值 - EF顯式傳遞實體中的所有值。

+0

足夠的理由不能在任何嚴重的應用程序中使用EF。 – xr280xr 2015-09-29 21:08:58

1

你可以在你的Product實體類的構造函數,

public class Product{ 
    public Product(){ 
    CreateDate =DateTime.Now; 
    } 
} 
+1

我知道這一點,但是當有多個相似領域的工作量非常大。 EF可以使用數據庫設置的「getdate()」而無需手動設置嗎? – 2012-04-24 05:48:46

相關問題