2012-06-23 34 views
0

我用下面的SQL腳本,以使在一個領域,當一個新行添加到表中設置當前時間:如何讓實體框架允許SQL Server爲字段提供定義的默認值?

ALTER TABLE [Items] ADD CONSTRAINT DF_Items DEFAULT GETDATE() FOR [CreationDate] 

現在我使用實體框架與此表的工作,並加入新行到它。我想要做的是讓特定列從SQL Server本身接收其值,而不必自己提供值。 在Visual Basic中將特定列的值設置爲Nothing會填充字段DateTime.MinValue,這不是我想要的(並且SQL Server不支持,順便說一句)。

爲了完成這項工作我需要做些什麼改變?

+0

從實體框架轉變爲明智的解決方案:) heheh – Andomar

+0

嗯Andomar,這將是一個非常戲劇性的變化。我正在尋找一個更小的! – TheAgent

回答

5

您必須在EDMX設計器中設置StoreGeneratedPattern(或代碼優先爲DatabaseGeneratedOption),並在該日期屬性中設置爲Identity。 EF總是發送.NET默認值,用於未存儲生成的未填充屬性。將模式設置爲Identity將告知EF該值在插入期間在數據庫中生成,並且將重新查詢其值。如果將模式從默認值更改,則無法在應用程序中設置屬性。

+0

是的,這是應該解決問題。但不幸的是,我再次得到了同樣的異常,雖然我將StoreGeneratedPattern設置爲Identity。異常再次告訴我,SQL不能接受#12:00:00 AM#作爲有效值,這意味着EF仍然將.NET默認值發送給SQL。還有什麼我應該小心的? – TheAgent

+0

將EDMX文件打開爲XML,並檢查該映射文件的CSDL部分和SSDL部分中的模式是否設置正確。 –

相關問題