C# 如何使用实体框架codefirst在数据库中插入空Datetime
我的模型包含一个可为空的datetime属性 我想在该字段中插入一个空值,但EF插入的是通常的00/00/0001日期,而不是空值,这也给了我一个错误 我正在使用microsoft sql server 2012 告诉我错误 将datetime2数据类型转换为datetime数据类型导致值超出范围。\r\n语句已终止 这是因为sql server datetime不能有00/00/0001,EF在数据库中插入空datetime后会自动生成该值 我想在数据库中插入null EF插入通常的00/00/0001日期,而不是null 这一点都不寻常。EF 6.1在自己的设备上插入C# 如何使用实体框架codefirst在数据库中插入空Datetime,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我的模型包含一个可为空的datetime属性 我想在该字段中插入一个空值,但EF插入的是通常的00/00/0001日期,而不是空值,这也给了我一个错误 我正在使用microsoft sql server 2012 告诉我错误 将datetime2数据类型转换为datetime数据类型导致值超出范围。\r\n语句已终止 这是因为sql server datetime不能有00/00/0001,EF在数据库中插入空datetime后会自动生成该值 我想在数据库中插入null EF插入通常的00/00
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
{
班级计划
{
静态void Main(字符串[]参数)
{
var DataContext=new StackOverflowContext();
DateTime?date=null;
var实体=新模型()
{
日期
};
DataContext.Models.Add(实体);
DataContext.SaveChanges();
}
}
类模型
{
公共int ModelId{get;set;}
公共日期时间?GoDate{get;set;}
}
类StackOverflowContext:DbContext
{
公共数据库集模型{get;set;}
}
}
您的映射或数据库架构很可能是错误的。您可以使用以下方法:
Nullable<DateTime> date=null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
Nullable date=null;
var实体=新模型()
{
日期
};
DataContext.Models.Add(实体);
DataContext.SaveChanges();
或者您可以这样设置:
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; }
注意日期时间日期之前的“?”您使用的是哪个数据库?SQL Server?当你说“给你一个错误”时,你会收到什么错误?您是使用DB first还是code first?insert的代码在哪里?使用Nullable还是DateTime?应该使其接受NULL。数据库中的列是否标记为“NOT NULL”?在数据库中,该字段被标记为NULL。问题是,如果datetime为NULL,并且sql server没有00/00/0001作为日期,则entity framework生成的datetime值为00/00/0001。我需要停止实体生成该默认值。在执行
SaveChanges()
时检查生成的sql并将其发布到此处。我注意到“?”在日期时间之后,但不是之前?
var entity= new Model
{
GoDate = (DateTime?) null
}
DataContext.Models.Add(entity);
DataContext.SaveChanges();
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
public DateTime? Date { get; set; }