【问题标题】:how to insert null Datetime in database with entity framework codefirst如何首先使用实体​​框架代码在数据库中插入空日期时间
【发布时间】:2014-10-26 00:00:29
【问题描述】:

我的模型包含一个可为空的日期时间属性。我正在使用 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 数据类型导致值超出范围。\r\n语句已终止。

这是因为 sql server datetime 不能有 00/00/0001,EF 会在向数据库中插入空 datetime 后自动生成。

我想在数据库中插入 null。

【问题讨论】:

  • 您使用的是哪个数据库? SQL 服务器?当你说它“给[你]一个错误”时,你会收到什么错误?您是先使用数据库还是先使用代码?
  • 插入的代码在哪里??
  • 使用 Nullable 还是 DateTime?应该让它接受NULL。数据库中的列是否标记为“NOT NULL”?
  • 在数据库中,该字段被标记为 NULL。同样的问题是,如果 datetime 为 null 并且 sql server 没有 00/00/,实体框架会生成一个 datetime 值 00/00/0001日期为 0001。我需要停止实体生成该默认值。
  • 在做SaveChanges()时检查生成的SQL并贴在这里。

标签: c# asp.net entity-framework


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    或者你可以这样设置:

    var entity= new Model
    {
        GoDate = (DateTime?) null
    }
    DataContext.Models.Add(entity);
    DataContext.SaveChanges();
    

    我认为它更干净一些。

    【讨论】:

      【解决方案3】:

      您可以在模型中使用类似的东西。然后从你的控制器发送 null 就可以了。

       [DataType(DataType.Date)]
              [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
              [Display(Name = "Date")]
              public DateTime? Date { get; set; }
      

      注意日期时间之后的?

      【讨论】:

      • 我注意到“?” 日期时间之后,但不是之前?
      【解决方案4】:

      你可以用这个:

       Nullable<DateTime> date=null;
       var entity = new Model()
                  {
                      GoDate = date
                  };
      
         DataContext.Models.Add(entity);
         DataContext.SaveChanges();
      

      【讨论】:

        猜你喜欢
        • 2015-12-22
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多