【问题标题】:Insert many to many record using MVC使用 MVC 插入多对多记录
【发布时间】:2012-11-12 12:14:00
【问题描述】:

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

表格在 personID 和干预ID 上链接,并带有这两者的组合 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)

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

【问题讨论】:

  • 您的模型配置正确吗?您是否尝试过在没有 MVC 的情况下重现这个 - 只是一个简单的 3 行应用程序?恐怕这里没有足够的细节可以提供帮助,而且您也没有在最简单的级别上解决问题。
  • EF 模型是从数据库中创建的,据我所知是正确的。数据库中的关系适用于直接 sql 查询。问题似乎是 personID 已经存在,因此干预表不需要对链接表进行任何更新,model.isvalid 即可返回 true。因此,Intervention 表获得了插入,但没有任何内容触发链接表上的插入。还有什么我需要做的。有什么我可以发布的代码对您有帮助吗?

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


【解决方案1】:

问题在于 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);
}

这可能不是实现此目的的最佳方法,但它确实有效。欢迎任何进一步的cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2018-07-28
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多