2011-09-14 34 views
5

我已經生成的類(的DbContext)建模我的數據庫(SQL Server 2008 R2中),並且在大多數我的表我有標準ModifiedDate和CreatedDate(無空)。其中每一個在SQLServer中都有一個默認的getdate(),並且我有一個觸發器來更新任何更新中的ModifiedDate。MVC 3日有默認值,並在SQL Server 2008 R2觸發,但還是要價值

生成的視圖包括ModifiedDate和CreatedDate字段,我不希望這些字段(用戶不應該看到這些字段),所以我將它們刪除了,但是當使用生成的Create視圖添加新條目時,我收到錯誤「將datetime2數據類型轉換爲日期時間數據類型導致超出範圍值」。

然後我添加了一些默認值,它確實添加了記錄,但它自然會添加我輸入的值,而不是SQL getdate()值,我更喜歡(我希望它顯示服務器時間) 。檢查對象(db.SaveChanges())的字段值爲{1/01/0001 12:00:00 AM}。

如何在不輸入日期的情況下使用這些模型?我已經搜查,但沒有找到我的答案... ;-(

回答

4

這是在這兩個實體框架和LINQ to SQL一個共同的問題:

在LINQ到SQL模型不知道默認值,所以試圖將它們賦值爲「null」 - 在這種情況下這是不可接受的。爲了解決這個問題,打開DBML文件並將字段的「Auto Generated Value」選項設置爲「true」 。問題

在實體框架這是一個有點不同:您將「StoreGeneratedPattern」在球場上要麼「身份」或「計算」這裏的描述:

http://msdn.microsoft.com/en-us/library/system.data.metadata.edm.storegeneratedpattern.aspx

EF會爲身份類型字段自動做到這一點,而不是默認值/ NOT NULL字段。您可能需要將您的CreatedDate設置爲「Identity」(僅在插入時更新),您的ModifiedDate設置爲「Computed」(插入和更新時更新)。

這樣做的副產品是,你那麼將無法通過LINQ的所有設置的領域 - 但這是在你的使用情況很好,我想。

+0

謝謝你,這是現貨。我們發現這將是您發佈之前不久的解決方案,但事實證明,實體框架中存在一個錯誤,意味着這些設置無論如何都沒有被拾起。 VS2010 SP1修復了這個錯誤,結果我們沒有運行SP1。現在所有的好,但感謝您的幫助! – Daryl