使用MVC插入多个到多个记录

时间:2012-11-12 12:14:00

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 many-to-many

我有两个表与多对多关系链接。当我尝试插入新的链接对象时,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)

如何强制插入链接表?

1 个答案:

答案 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);
}

这可能不是实现此目的的最佳方式,但它可行。欢迎任何进一步的评论。