在搜索Stack Overflow和Google時,我很難找到明確的答案,希望有人能指點我正確的方向。MVC和EF4 CTP模型綁定和保存分層模型
我的情況 我希望能夠使用單個編輯表單(在一個單一的視圖)使用ASP.NET MVC 3和Entity Framework 4 CTP更新3級深層次的實體(代碼 - 第一個) - 該模型由服務組成,該服務可以有許多服務選項,在Turn中可以有許多庫存項目。
我期待能夠使用MVCS默認的模型粘合劑(通過TryUpdateModel)到:
- 更新現有的「服務」記錄
- 添加/更新/刪除「服務選項」記錄(附到服務),這取決於張貼值
- 添加/更新/刪除「廣告資源」記錄(附加到每個服務選項),這取決於張貼值
中號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等)
在此先感謝!
謝謝jfar ..所以,如果你需要發佈一個單一的形式,其中更新到一個實體,它的子女和孫子們 - 你會怎麼做呢?用DTOs?然後手動更新實體圖以反映保存前的DTO內容? – Brendan 2011-01-25 00:23:43