我试图通过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充其量只是初学者。
答案 0 :(得分:1)
远程数据库中的表具有为" DRTReviewerId"创建的主键或唯一键。柱。因此它不接受空值。更新远程数据库中的表模式。
要使主键自动递增,您必须将Identity Specification-> Is Identity设置为true,将Identity Increment设置为1(在DRTReviewerId列属性中)。
答案 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;
}