【发布时间】:2011-05-19 15:16:54
【问题描述】:
我有一个 ASP.NET MVC 3 应用程序,使用 Entity Framework 4 来处理数据访问。
我的视图模型对象结构如下所示:
public class OrderViewModel
{
public int Id { get; set; }
/* ... */
public List<OrderLineItemViewModel> LineItems { get; set; }
}
public class OrderLineItemViewModel
{
public int Id { get; set; }
public string Name { get; set; }
}
而且,我的实体框架模型如下所示:
public class Order
{
public int Id { get; set; }
/* ... */
public List<OrderLineItem> LineItems { get; set; }
}
public class OrderLineItem
{
public int Id { get; set; }
public string Name { get; set; }
}
我正在努力解决的问题是如何处理编辑现有订单。我的控制器函数会将父视图模型转换为订单对象,并将子视图模型 (OrderLineItemViewModel) 转换为实体模型 (OrderLineItem)。但是,在将实体附加到 ObjectContext 后,它会丢失已更改、添加或删除行项目的状态。
我发现的所有解决父/子关系的示例似乎都主张不要对子级进行级联更新,而是更喜欢使用单独的控制器操作和视图来更新子集合。但是,我试图将编辑作为一个原子操作进行......当用户点击“编辑顺序”提交更改时,我希望更新父字段,并处理任何新/删除/修改的子项。 ..
从视图模型转换时,在实体框架中处理子对象更改跟踪的最佳方法是什么?
我尝试将 IsNew、IsDirty 和 IsDeleted 添加到 ViewModel 和 Model,然后为每个孩子调用适当的函数(附加、删除或添加),但在尝试添加时出现错误,说孩子已经以 UnChanged 状态存在于 ObjectStateManager...
谢谢!
【问题讨论】:
标签: asp.net-mvc-3 entity-framework-4 viewmodel