MVC& SQL:迁移到新数据库后,无法将值NULL插入列

时间:2016-10-05 15:36:28

标签: c# sql asp.net-mvc

我试图通过MVC网页将值插入表中。当我从Visual Studio生成的localDB运行网页时,没有发生此错误。由于我迁移到远程数据库,我现在收到此错误。

无法将值NULL插入列' DRTReviewerId',table' FC.Developer_Schema.DRTReviewers'列不允许空值。 INSERT失败。 声明已经终止。

以下是令人讨厌的代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "DRTReviewerId,Name")] DRTReviewer dRTReviewer)
    {
        if (ModelState.IsValid)
        {
            db.DRTReviewers.Add(dRTReviewer);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(dRTReviewer);
    }

DRTReviewerId的值应该是代码生成的int,但是由于我切换了数据库,因此不再发生这种情况。什么可能导致这种变化?

代码完全使用实体框架生成。我的知识MVC充其量只是初学者。

2 个答案:

答案 0 :(得分:1)

远程数据库中的表具有为" DRTReviewerId"创建的主键或唯一键。柱。因此它不接受空值。更新远程数据库中的表模式。

要使主键自动递增,您必须将Identity Specification-> Is Identity设置为true,将Identity Increment设置为1(在DRTReviewerId列属性中)。

enter image description here

答案 1 :(得分:-1)

我会在try catch中包装db.SaveChanges()以查看详细的错误信息:

try{
       db.SaveChanges();
}
catch (DbEntityValidationException vex)
{
       // Write to log file if you have logging support 
       Debug.WriteLine(HandleDbEntityValidationException(vex));
       throw;
}
catch (DbUpdateException dbu)
{
       // Write to log if you have logging support
       Debug.WriteLine( HandleDbUpdateException(dbu));
       throw;
}