私はEF5コードファーストを使用しています:
public class Scenario
{
public int Id { get; set; }
public IList<Client> Clients { get; set; }
}
public class Client
{
public int Id { get; set; }
public string Name {get;set;}
public int VisibilityNumber{ get; set; }
}
シナリオオブジェクトをビューに直接送信しています(MVC4、viewmodelクラスを使用せずに-おそらく間違いですか?しかし、配管コードははるかに少ないです)。私の見解では、HiddenForforScenario.Idとforループを使用して各クライアントVisibilityNumberのEditForを表示しています。
これはコントローラーです:
[HttpPost]
public ActionResult Edit(int id, FormCollection formValues)
{
if (ModelState.IsValid)
{
Scenario scen=GetScenarioFromDB(id);
TryUpdateModel(scen,formValues);
if (ModelState.IsValid)
SaveToDb(scen);
}
}
TryUpdateModelの後、各Clientsオブジェクト(DBから正しくロードされたもの)に対して:
- VisibilityNumberが正しく設定されている
- Idは0に設定されていますが、これはもちろん悪いことです
- 名前がnullに設定されている
MVCソースコード(DefaultModelBinder / UpdateCollection)を確認すると、コレクションにバインドするときに、常に新しいアイテムが作成されることがわかります。それを修正できない場合は、viewModelとAutoMapperを使用すると思います。MVCチームは、EFオブジェクトを直接送信するのではなく、viewModelを使用するように強制したいと考えています。