迁移时System.DateTime会出错

时间:2016-02-24 21:43:01

标签: asp.net-mvc entity-framework

我的模特中有以下课程

        public DateTime DateTimePosted { get; set; }

并且在数据库迁移时导致此错误 "无法将值NULL插入列' DateTimePosted"

但是当我以这种方式在模型中允许空值时

        public DateTime? DateTimePosted { get; set; }

然后迁移成功,但Db中的列保持可为空, 但是当我试图通过种子方法将它传递给Db时,它可以正常工作。

这是我的控制器

public ActionResult AddApartment()
    {
        return View(new Apartment { DateTimePosted = DateTime.Now });
    }

我的问题是 如何传递到发布数据的DB日期和时间

1 个答案:

答案 0 :(得分:0)

您收到此错误是因为您尝试在已包含某些数据的表上添加新的非可空列。因为您要添加一个不可为空的列,所以DB Migrations不知道要为新列设置哪个值已经插入到表中的行。要解决这个问题,你有两个解决方案:

  • 使用DateTime?

  • 使DateTimePosted成为可以为空的数据
  • 修改新生成的迁移文件,方法是找到添加新列的行,然后添加defaultValueSql参数,如下所示:

代码:

AddColumn("YOUR_TABLE_NAME", "DateTimePosted", 
   c => c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()")
);