我有两个表与多对多关系链接。当我尝试插入新的链接对象时,MVC实体框架隐藏链接表并忽略它。
表格在personID和interventionID上与两者的组合PK相关联。
我正在添加一个新的干预措施,其干预ID被创建为新密钥。我已将personID传递给控制器,调试器使用正确的值显示它。
然而,当我打电话时:
db.tInterventions.Add(tintervention);
db.SaveChanges();
return RedirectToAction("Index");
...链接表没有填满。
create方法如下:
[HttpPost]
public ActionResult Create([Bind(Exclude = "interventionID")]tIntervention tintervention,
tPerson tperson,
int id,
int? personID)
如何强制插入链接表?
答案 0 :(得分:0)
问题在于PersonID在可选参数中。因为该参数不是必需的,所以当填充PersonID但未将值传递给模型时,ModelState.IsValid将返回True。
我添加了检查personID的条件,然后按照以下方式对干预人员进行查找/绑定:
[HttpPost]
public ActionResult Create([Bind(Exclude = "interventionID")]tIntervention tintervention, int id, int? personid)
{
tintervention.householdID = id;
if (ModelState.IsValid)
{
db.tInterventions.Add(tintervention);
if (personid.HasValue)
{
int personID = personid.Value;
var q = (
from p in db.tPersons
where (p.personID == personID)
select p.personID
);
personID = q.FirstOrDefault();
tPerson tperson = db.tPersons.Find(personID);
tintervention.tPersons.Add(tperson);
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(tintervention);
}
这可能不是实现此目的的最佳方式,但它可行。欢迎任何进一步的评论。