我有一個ASP.NET MVC 3應用程序,使用實體框架4來處理數據訪問。ASP.NET MVC3父子關係和實體框架,如何更新孩子?
我的視圖模型對象的結構是這樣的:
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; }
}
,我用的是如何處理編輯掙扎的事情現有訂單。我的控制器函數將父視圖模型轉換爲一個Order對象,並將子對象(OrderLineItemViewModel)轉換爲實體模型(OrderLineItem)。但是,在將實體附加到ObjectContext時,它會丟失哪些行項目已更改,添加或刪除的狀態。
我發現地址父/子關係的所有示例似乎都提倡不對兒童進行級聯更新,寧願使用單獨的Controller Action和View來更新子集合。但是,我試圖讓編輯發生爲一個原子操作......當用戶點擊「編輯順序」來提交更改時,我希望更新父項字段,以及處理任何新的/刪除/修改的子項。 ..
在從視圖模型轉換時,處理實體框架中的子對象的更改跟蹤的最佳方法是什麼?
我已經嘗試添加一個IsNew,IsDirty和IsDeleted到ViewModel和模型,然後調用每個孩子(附加,刪除或添加)適當的功能,但我收到錯誤時試圖添加說孩子alreadys存在於UnChanged狀態的ObjectStateManager中...
謝謝!
第二個方法,代碼示例(帶的DbContext雖然),只是作爲附加參考:http://stackoverflow.com/q/5538974/270591 – Slauma 2011-05-19 17:18:08
謝謝!這證實了我的想法......我本來希望EF能阻止我這樣做國家管理。 – vt100 2011-05-19 18:56:04