0

多対多の関係でリンクされている2つのテーブルがあります。MVCエンティティフレームワークはリンクテーブルを非表示にし、新しいリンクオブジェクトを挿入しようとすると無視します。

テーブルは、personIDとinterventionIDで、これら2つのPKを組み合わせてリンクされています。

新しいキーとして作成されたinterventioIDを持つ新しい介入を追加しています。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)

リンクテーブルに強制的に挿入するにはどうすればよいですか?

4

1 に答える 1

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

これはこれを達成する最良の方法ではないかもしれませんが、うまくいきます。さらにコメントを歓迎します。

于 2012-12-11T17:09:27.470 に答える