我的模型包含一个可为空的日期时间属性。我使用 CodeFirst
public DateTime? GoDate { get; set; }
我想在该字段中插入一个空值,但 EF 插入通常的 00/00/0001 日期而不是空值,这也会给我一个错误。
我正在使用 microsoft sql server 2012。
DateTime? date = null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
请告诉我错误。
将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。 该声明已终止。
这是因为 sql server 日期时间不能有 00/00/0001,EF 在将空日期时间插入数据库后会自动生成该值。
我想将 null 插入数据库。
EF 插入通常的 00/00/0001 日期而不是 null
没有什么平常。 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; }
}
}
您的映射或数据库架构很可能是错误的。
或者你可以这样设置:
var entity= new Model
{
GoDate = (DateTime?) null
}
DataContext.Models.Add(entity);
DataContext.SaveChanges();
我觉得这样更干净一点。
您可以在模型中使用类似的东西。然后从你的控制器发送 null 就可以正常工作了。
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
public DateTime? Date { get; set; }
注意日期时间后面的
?
。
你可以使用这个:
Nullable<DateTime> date=null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();