我的模型包含一个可以为空的datetime属性。我正在使用CodeFirst
public DateTime? GoDate { get; set; }
我想在该字段中插入一个null值,但EF会插入通常的00/00/0001日期而不是null,这也会给我一个错误。
即时通讯使用microsoft sql server 2012。
DateTime? date = null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
给我错误。
将datetime2数据类型转换为日期时间数据类型会导致超出范围的值。\ r \ n该语句已终止。
这是因为sql server datetime不能有00/00/0001,EF会在数据库中插入空日期时自动生成。
我想在db中插入null。
答案 0 :(得分:14)
EF插入通常的00/00/0001日期而不是空白
关于它没有通常的。 EF 6.1继承自己的设备,插入NULL
。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var DataContext = new StackOverflowContext();
DateTime? date = null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
}
}
class Model
{
public int ModelId { get; set; }
public DateTime? GoDate { get; set; }
}
class StackOverflowContext : DbContext
{
public DbSet<Model> Models { get; set; }
}
}
您的映射或数据库架构很可能是错误的。
答案 1 :(得分:2)
或者你可以像这样设置:
var entity= new Model
{
GoDate = (DateTime?) null
}
DataContext.Models.Add(entity);
DataContext.SaveChanges();
我认为它有点清洁。
答案 2 :(得分:1)
你可以使用它:
Nullable<DateTime> date=null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
答案 3 :(得分:1)
您可以在模型中使用类似的内容。然后从你的控制器发送null将正常工作。
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
public DateTime? Date { get; set; }
注意&#34;?&#34;在DateTime日期之前