2010-10-30 42 views
5

我有一個使用實體框架和SQL Server 2008數據庫的MVC應用程序。我使用EF嚮導來生成我的數據模型。datetime2和ProviderManifestToken在實體框架

我有一個SQL Server表,標準DateTime列。 EF型號使用System.DateTime

但是,當我嘗試插入一個新的記錄到從我的應用程序這個表,而不指定此DateTime列的值,我得到的錯誤:

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

我用Google搜索了一下,發現那人是編輯edmx並更改ProviderManifestToken。有些時候會被覆蓋,那麼是否有更長久的修復方法或解決方法呢?

回答

3

問題是因爲,像你說的,你不上,導致其默認爲「0001-01-01」這絕對是超出範圍datetime的實體的DateTime屬性設置任何值 SQL Server上的列。日期時間類型日期範圍是1753年1月1日至9999年12月31日

爲了解決這個問題,你必須要麼把它發送到SQL Server之前指定一個範圍內的值給該屬性,或者改變您的數據庫列類型datetime2已經通過9999-的0001-01-01日期範圍12-31

+0

如果我沒有明確地爲一個實體屬性設置一個值,那麼EF不應該插入一個空值? – Blackcoil 2010-10-30 20:11:43

+1

不,它將被設置爲.Net中的默認(DateTime)。請注意,DateTime是一個*值類型*,不能爲空,但是日期時間?能夠。在EF中有很多方法可以根據其用途自動填充此屬性(以及基本上任何實體的屬性)。 – 2010-10-30 20:28:29