【发布时间】:2017-02-28 05:23:14
【问题描述】:
在不同的上下文中有很多关于这个错误的问题,到目前为止我一直无法找到一个适用于我的情况的问题。
我正在尝试与第三张桌子建立多对多关系。它基本上是一个人到经理协会。所有经理都是人,但并非所有人都是经理,而且每个人都有很多经理,每个经理都有很多人。所以在经理的表中是PersonIds。在编辑下的人员控制器中,可以选择将人员与经理关联起来。单击可用的管理器并单击保存时,出现错误:
INSERT 语句与 FOREIGN KEY 约束“FK_dbo.ManagerToEngineer_dbo.Manager_ManagerId”冲突。冲突发生在数据库“PROJECTNAME_16ce3f6a2a6c4ff0b1ce147d126984ba”、表“dbo.Manager”、列“ManagerId”中。声明已终止。
SaveChanges 方法导致此错误:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(PersonViewModel person)
{
if (ModelState.IsValid)
{
//var MyPerson = db.people.Find(person.PersonId);
//MyPerson.FirstName = person.FirstName;
//MyPerson.LastName = person.LastName;
foreach (var item in db.ManagersToEngineers)
{
if (item.EngineerId == person.PersonId)
{
db.Entry(item).State = EntityState.Deleted;
}
}
foreach (var item in person.EngineerManagers)
{
if (item.Checked)
{
db.ManagersToEngineers.Add(new ManagerToEngineer() { EngineerId = person.PersonId, ManagerId = item.Id });
}
}
//db.Entry(person).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(person);
}
相关型号:
public class ManagerToEngineer
{
[Key]
public int ManagerToEngineerId { get; set; }
[Required]
[ForeignKey("engineer")]
public int EngineerId { get; set; }
[Required]
[ForeignKey("manager")]
public int ManagerId { get; set; }
public virtual Person engineer { get; set; }
public virtual Manager manager { get; set; }
}
public class Manager
{
[Key]
public int ManagerId { get; set; }
[Required]
[ForeignKey("person")]
public int EngineerId { get; set; }
public virtual Person person { get; set; }
public ICollection<ManagerToEngineer> ManagersToEngineers { get; set; }
}
public class PersonViewModel
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Display(Name = "Managers")]
public List<CheckBoxViewModel> EngineerManagers { get; set; }
}
public class CheckBoxViewModel
{
public int Id { get; set; }
public string FullName { get; set; }
public bool Checked { get; set; }
}
【问题讨论】:
-
您应该在此处查看有关 EF Core 中多对多关系的文档:docs.efproject.net/en/latest/modeling/…。
标签: c# asp.net-core entity-framework-core