我有以下模型实体:
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向表中添加行?
答案 0 :(得分:1)
sql server希望在数据库中存储1.1.0001,但这不在SQL Server DateTimes的范围内。 我没有那么多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