0

これらの POCO クラスを考えると

class MainClass{

    [Key] int id {get;set;}

    public string name {get;set;}

    [Required] 
    public virtual ICollection<SubItem> subItems {get;set} // unique sub items

}

Class SubItem{

    [Key] int id {get; set;}

    public string name {get;set;}

    [Required] // required is nedded. the subitem cannot exist by it's self
    public MainClass parent {get; set;}
}

それを投稿してコントローラーにバインドすると、すべてが設定され、すべてのサブアイテムの状態を次のように設定しました。

public virtual ActionResult Edit([Bind()] MainClass entity) {
    foreach(var subItem in entity.subItems)
        db.Entry(subItem).State = System.Data.Entity.EntityState.Modified;

    if (ModelState.IsValid) { // Fails here
        db.Entry(entity).State = System.Data.Entity.EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Edit", new { edited = "true" });
    }

}

ただし、modelState には、各項目の「親を null にすることはできません」というエラーが含まれています。そして検証は失敗します。何らかの理由で、「親」プロパティが自動的に入力されません。どうすれば回避できますか?

このようなビューをレンダリングしています。

@model MainClass
@Html.HiddenFor(m=>m.id)
@Html.EditorFor(m=>m.name)
@Html.EditorFor(m=>m.subItems)

SubItem には次のようなものがありますEditorTemplate

@model SubItem
@Html.HiddenFor(m=>m.id)
@Html.EditorFor(m=>m.name)

[Required] parentカスケード削除のために必要です。

[Required]すべてがうまく機能しなければ。また、db を保存すると、parent プロパティが追加されます。ただし、カスケード削除は移行時にオフになります。

4

0 に答える 0