在更改了我的模型之后和更新数据库之前,从db中删除了我的一个表后,我收到此错误。然后,我必须删除并重新创建迁移文件,并从db中删除迁移历史记录。现在当我尝试在db中创建一个新公司时,即使我没有显式添加主键值,也会出现此错误。我浪费了几个小时试图了解发生了什么,并为此错误阅读解决方案,但没有一个对我有用。这之前有效。请帮忙!
模特:
public class Company
{
public int CompanyId { get; set; }
//....other properties of the company follows here....
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
}
在控制器中:
public ActionResult Create([Bind(Include = "Name,Address,PhoneNo,Email")] Company company)
{
if (ModelState.IsValid)
{
db.Companies.Add(company);
db.SaveChanges();
return RedirectToAction("Index", "CompaniesRolesMV");
}
return View(company);
}
更新:我忘了提到我有两个从公司到角色和员工的一对多关系。添加了流畅的API以使用模型构建器设置DELETE ON CASCADE false。尝试了你的评论中的所有建议,我非常感谢你。我现在有另一个错误:
无法将值NULL插入“CompanyId”列,表'aspnet-DevEnvExamProject-20161213094625.dbo.Companies';列不允许空值。 INSERT失败。 声明已经终止。
调试它,并将Create方法中的公司对象添加0到CompanyId属性。我强迫它取值1,同样的错误!
答案 0 :(得分:0)
将我的所有代码移动到一个新项目,“神奇地”问题已经消失。谢谢大家的帮助和建议!
之后我发现了问题的原因,就像帕维梅告诉我的那样。
答案 1 :(得分:0)
如果您在表上进行更改时“首先使用数据库中的代码”模式,并且想要应用它而不替换所有代码
您可以删除Models.[DBContext]
并使用相同的Models.[DBContext]
名称创建另一个。