2012-01-27 26 views
1

我有以下模型實體:保存一個DateTime到代碼優先生成的數據庫異常

public class ScheduledTask 
    { 
     public virtual int ScheduledTaskId { get; set; }  
     public virtual Incident TemplateIncident { get; set; } 
     //Some props are omitted for simplicity  
     [Display(Name = "Next runtime")] 
     [Required] 
     [DataType(DataType.DateTime)] 
     public virtual DateTime NextExecuteAfterDate { get; set; } 
    } 

它是一個DataContext的一部分作爲:在溶液

public DbSet<ScheduledTask> ScheduledTasks { get; set; } 

的UI是一個MVC3網站。

每當用戶保存記錄,可調度任務被一起保存:

_db.Add(new ScheduledTask 
         { 
          NextExecuteAfterDate = DateTime.MinValue, 
          Schedule = scheduleTypeId, 
          TemplateIncident = incident 
         }); 
      _db.SaveChanges(); 

正如你所看到的,我創造我的實體類的實例,分配DateTime屬性的最小值和將其添加到DbContext。然後我打電話給SaveChanges()

SaveChages()生成

[SqlException (0x80131904): The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. 
The statement has been terminated.] 

在數據庫中的NextExecuteAfterDate是一種類型datetime, not null的列。

從哪裏來的datetime2,以及如何解決問題,並獲得EF添加一行到表?

回答

1

sql服務器想要在數據庫中存儲1.1.0001,但那不在SQL Server日期時間範圍內。 我還沒有使用過EF,但在其他ORM中,您可以簡單地將DateTime更改爲Nullable並顯式存儲空值。 這樣的:

public class ScheduledTask 
{ 
    public virtual int ScheduledTaskId { get; set; }  
    public virtual Incident TemplateIncident { get; set; } 
    //Some props are omitted for simplicity  
    [Display(Name = "Next runtime")] 
    [DataType(DataType.DateTime)] 
    public virtual DateTime? NextExecuteAfterDate { get; set; } 
} 

也許這個作品與EF太

+0

是的,我是不知道的一個事實,即淨的DateTime.MinValue不SQLDATETIME一起玩。 – 2012-01-27 22:01:15

相關問題