Stack Overflow と Google を検索するときに、状況に対する明確な答えを見つけるのに苦労しています。うまくいけば、誰かが私を正しい方向に向けることができます。
私の状況 ASP.NET MVC 3 および Entity Framework 4 CTP (コードファースト) を使用して、単一の編集フォーム (単一のビュー内) を使用して、3 レベルの深さの階層エンティティを更新できるようにしたいと考えています。多くのサービス オプションを持つことができるサービスは、多くのインベントリ アイテムを持つことができます。
MVC の既定のモデル バインダーを (TryUpdateModel 経由で) 使用できることを期待していました。
- 既存の「サービス」レコードを更新する
- 投稿された値に応じて、「サービス オプション」レコード (サービスに添付) を追加/更新/削除します。
- 投稿された値に応じて、「在庫」レコード (各サービス オプションに添付) を追加/更新/削除します。
私のモデル
[Bind(Include="Name, ServiceOptions")]
public class Service {
[Key]
public int ServiceID { get; set; }
public string Name { get; set; }
public DateTime DateCreated { get; set; }
public virtual ICollection<ServiceOption> ServiceOptions { get; set; }
}
[Bind(Include="ServiceOptionID, Description, Tags")]
public class ServiceOption {
[Key]
public int ServiceOptionID { get; set; }
public int ServiceID { get; set; } /* parent id reference */
public string Description { get; set; }
public virtual ICollection<Inventory> InventoryItems { get; set; }
}
[Bind(Include = "InventoryID, Description")]
public class Inventory {
[Key]
public int InventoryID { get; set; }
public int ServiceOptionID { get; set; } /* parent id reference */
public string Description { get; set; }
}
理想的なコントローラーの方法:
[HttpPost]
public ActionResult EditService(int id) {
Service service = db.Services.Single(s => s.ServiceID == id);
TryUpdateModel(service); // automatically updates child and grandchild records
if (ModelState.IsValid) {
db.SaveChanges();
return RedirectToAction("Index");
}
return View(service);
}
このユートピアの夢を実現する方法はありますか、それとも間違った木を吠えていますか? 別のテクノロジー (通常の EF4、Automapper など) を使用することにオープンです。
前もって感謝します!