在搜索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