Asp.net-Mvc

使用 EF4 轉換為日期時間時發生溢出

  • July 18, 2011

我有一個使用 EF 4.1 和程式碼優先方法的 Windows 應用程序與 SQL Compact 4.0 數據庫一起使用。我無法將對象保存到數據庫,因為我遇到異常,在嘗試保存引用類型時出現內部異常“轉換為日期時間時發生溢出”:

public class Quotation
{
   public int ID { get; set; }

   public string Name { get; set; }

   public DateTime DateCreated { get; set; }

   public ContactPerson ContactPersonAssigned { get; set; }

   public string OurReference { get; set; }

   public string QuotationDataString { get; set; }
}

我讀到這個錯誤可能是由於我的應用程序設置和關於日期轉換的 sql compact 數據庫設置不匹配造成的。我不確定,因為我的 sdf 數據庫文件有一個正確命名為“DateCreated”、不可為空且類型為“datetime”的欄位。

我是 SQL 緊湊型的新手。你能幫我調試一下這個問題嗎?

如果您的模型具有 DateTime 類型的不可為空的屬性,當您發布該屬性的值為空的表單時,它會自動設置為 DateTime.MinValue,它位於 .net 01/01/0001 中(MSDN 上的 DateTime.MinValue

(作為旁注,您可以通過實現您自己IModelBinder的 DateTime 來更改此行為,如果嘗試的值為 null/空且屬性不可為 null,則可能會引發驗證異常)。

如果您嘗試將該值 ( DateTime.MinValue) 保存到數據庫中,如果數據庫欄位是 sql 類型 datetime,則會出現轉換錯誤,因為 .net DateTime.MinValue 小於 SQL datetime minvalue (01/01/1753),因此無法轉換到 sql 值。(MSDN 上的 SQL 日期時間最小值

此錯誤不會發生在較新版本的 MS SQL Server 上,它具有 datetime2 數據類型,允許值從 01/01/0001 到 31/12/9999(MSDN 上的 SQL datetime2)(當然,如果 datetime2 用於該欄位) .

引用自:https://stackoverflow.com/questions/6730859