如何在数据库中首先使用实体​​框架代码插入null Datetime

时间:2014-10-26 00:00:30

标签: c# asp.net entity-framework

我的模型包含一个可以为空的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。

4 个答案:

答案 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; }
    }
}

enter image description here

您的映射或数据库架构很可能是错误的。

答案 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日期之前