2012-09-18 32 views
2

我在mvc應用程序中有實體模型。我有兩個表:綁定到複雜對象列表

引擎:ID,名稱,零件

部分:身份證,ENGINEID,名稱,價格

有一到這兩個表之間的多對多關係。

在視圖:

@model Engine 

<input type="hidden" name="Id" value="@Model.Id" /> 
<input type="text" name="Name" value="@Model.Name" /> 

@for(var part in Model.Parts) 
{ 
    <input type="hidden" name="Parts.Index" value="@guide" /> 
    <input type="hidden" name="Parts[@guide].Id" value="@part.Id" /> 
    <input type="text" name="Parts[@guide].Name" value="@part.Name" /> 
    <input type="text" name="Parts[@guide].Price" value="@part.Price" /> 
} 

在控制器:

public ActionResult Edit(int id) 
{ 
    var model = context.Engines.FirstOrDefault(x=>x.Id == id); 
    return View("Engine", model); 
} 

[HttpPost] 
public ActionResult Edit(int id, FormCollection collection) 
{ 
    var model = context.Engines.FirstOrDefault(x=>x.Id == id); 
    UpdateModel(model); 
    context.SaveChanges(); 
} 

我加入,並在飛行中取出部件。當我發佈時,我有model.Parts中的零件列表。他們都添加了實體狀態。我希望Id具有EntityState.Modified的所有部分和那些被刪除的部分都必須具有EntityState.Deleted,並且添加的對象應該具有EntityState.Added。可能嗎? (EF版本4.0)

回答

1

默認活頁夾對EF狀態一無所知。您可以爲Engine類創建新的模型聯編程序並手動設置狀態。

+0

你能舉個例子嗎? – karaxuna

+0

你可以從這裏開始(http://brendan.enrick.com/post/Custom-Model-Binders-in-ASPNET-MVC.aspx)或這裏(http://mikehadlow.blogspot.com/2010/04/定製ASPNET-MVC模型 - 粘合劑 - for.html) – Dima