Stack OverflowとGoogleを検索しているときに私の状況に明確な答えが見つからない場合は、誰かが私を正しい方向に向けることができれば幸いです。MVCとEF4 CTPモデルバインディングと階層モデルの保存
私はASP.NET MVC 3とEntity Frameworkの4 CTPを使用して3レベルの深さの階層的なエンティティを更新するために、(単一ビューで)、単一の編集フォームを使用できるようにしたい 私の状況(コード - 最初に) - このモデルはサービスで構成され、多くのサービスオプションを持つことができ、ターンでは多くのインベントリアイテムを持つことができます。
- アップデート既存の「サービス」レコード
- 追加/更新/削除「サービスオプション」記録(添付: 私はに(TryUpdateModel経由)MVCSのデフォルトのモデルバインダーを使用できるように期待していた
が
投稿の値に応じて)各サービスオプションに添付(掲示値 - 追加/更新/削除「インベントリ」の記録に応じて)サービスへ
M yのモデル
[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など)を使用することに開放しています
ありがとうございます!
ありがとうございました。エンティティ、その子ども、孫に更新をとった単一のフォームを投稿する必要がある場合は、どうしたらいいですか? DTOで?保存する前にDTOの内容を反映するように手動でエンティティグラフを更新しますか? – Brendan