2011-07-27 34 views
0

我使用SQLServer 2008,WebForms,C#,Frameowrk 3.5,實體框架1 我從DB生成實體模型。實體模型 - 如何在插入時使用數據庫的默認列值

我DB具有各種表格&讓我們例如一個表用戶 的它領域的ID,姓名,電子郵件,created_on,爲IS_ACTIVE和on_leave性能IS_ACTIVE,is_on_leave 默認值是DB

默認爲0(零)

但是,當我嘗試使用實體模型在此表中插入記錄時,它將在這些字段中保存NULL。如何避免這種情況?我不想從我的頁面爲它們設置一個值,並且想要使用數據庫中提到的值。

我該如何做到這一點?

回答

3

此列可以爲空。在設計器中右鍵單擊屬性,選擇屬性並將StoreGeneratedPatern屬性設置爲在屬性窗口中計算。 我發現了類似的問題: Set default value in EF designer datetime

+0

假設1.您有一個默認值,因爲您不希望在這些列中有空,並且2.您可以控制數據庫,這似乎是明智的做出列非空的。如果這些假設都不正確,這是一個很好的解決方法:) –

+0

我同意第一個假設 - 如果您設置了默認值,您不希望列中出現空值,但我不同意我的解決方案是一種解決方法 - 他必須設置StoreGeneratedPattern,即使他改變列並使其不可空。如果他只在db級別設置了非空值,並且沒有設置storegeneratedpattern,那麼他將收到一個錯誤,因爲在不允許爲null的列中插入空值。 – objectbox

+0

如果將列設置爲非空值,則從數據庫更新模型,與數據庫字段對應的屬性將爲非空值,並且EF將插入屬性類型的默認值,而不是空值。在這種情況下,屬性類型的默認值爲false,這也是數據庫中的默認值。我會說設置storegeneratedpattern治癒的問題,但使列不可爲空阻止它。 –

1

數據庫中的is_activeis_on_leave列可以爲空。如果你使它們不可爲空,那麼當你插入時應該使用默認值。

ALTER TABLE [user] ALTER COLUMN [is_active] DEFAULT(0) NOT NULL 
ALTER TABLE [user] ALTER COLUMN [is_on_leave] DEFAULT(0) NOT NULL 
GO 
相關問題