0

我有两个以多对多关系链接的表。当我尝试插入新的链接对象时,MVC 实体框架会隐藏链接表并忽略它。

表在 personID 和 interventionID 上链接,并带有这两者的组合 PK。

我正在添加一个新的干预措施,该干预措施将 interventioID 创建为新密钥。我已将 personID 传递给控制器​​,调试器将其显示为正确的值。

但是,当我打电话时:

        db.tInterventions.Add(tintervention);
        db.SaveChanges();
        return RedirectToAction("Index");

...链接表没有被填满。

创建方法如下:

    [HttpPost]
 public ActionResult Create([Bind(Exclude = "interventionID")]tIntervention tintervention,
 tPerson tperson,
 int id,
 int? personID)

如何强制在链接表上插入?

4

1 回答 1

0

问题归结于 PersonID 在可选参数中。因为该参数不是必需的,所以 ModelState.IsValid 将在填充 PersonID 但未将值传递到模型时返回 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);
}

这可能不是完成此任务的最佳方法,但它确实有效。欢迎任何进一步的评论。

于 2012-12-11T17:09:27.470 回答