私は何時間も見回しましたが、私の問題を解決するための簡単な方法を見つけることができないようです.
基本的に、テーブルで橋渡しされた 1 対多の関係があります。私のコントローラーは「作成」メソッドを完全に処理しているようで、「1」テーブル内にレコードを作成し、「多」テーブルをブリッジします。
ただし、「編集」メソッドは、ブリッジ テーブルをまったく変更/更新していないようです。私が間違っていること、および「作成」アプローチと異なる理由について何か考えはありますか?
簡潔にするために、次のモデルがあるとしましょう。
public class Incident
{
[Key]
public int IncidentID { get; set; }
public string Title { get; set; }
public virtual ICollection<IncidentResources> Resources{ get; set; }
}
そしてリソースモデル:
public class Resource
{
[Key]
public int ResourceID{ get; set; }
public int Name { get; set; }
...OTHER FIELDS REMOVED FOR BREVITY...
}
そして、ブリッジ テーブルとモデルを介してこれら 2 つをブリッジしています。
public class IncidentResource
{
[Key]
public int IncidentResourceID { get; set; }
public int IncidentID { get; set; }
public int ResourceID { get; set; }
public virtual <Resource> Resource { get; set; }
}
私のコントローラーには、次のコードがあります。
[HttpPost]
public ActionResult Create(Incident incident)
{
//incident.Resources is returned as a valid object...
if (ModelState.IsValid)
{
db.Incidents.Add(incident);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(incident);
}
上記は完全に機能します!前述したように、新しいインシデントが適切なテーブルに挿入され、インシデントに割り当てられたすべてのリソースが IncidentResources テーブルに追加されます。
ただし、次のコードは編集のためにこのように機能しません...
[HttpPost]
public ActionResult Edit(Incident incident)
{
if (ModelState.IsValid)
{
//THE USER CAN ADD ADDITIONAL RESOURCES
foreach (IncidentResource r in incident.Resources)
{
r.IncidentID = incident.IncidentID;
}
db.Entry(incident).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(incident);
}
繰り返しますが、上記は IncidentResources テーブルに対して何もしていないように見えます。レコードは追加、削除、または更新されません。私もエラーを受け取りません。それは何もしません。
ブリッジテーブルのデータを破棄して再挿入したくないことに注意してください。孤立させたくないデータに対して 1 対多の関係を持ちます。
これがどのように機能するかについて、私は何を理解していませんか?