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;}
}

将其发布并绑定到控制器时,一切都设置好了,我将所有 SubItems 状态设置为:

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 包含每个项目的“父级不能为空”错误。并且验证失败。由于某种原因,“父”属性不会自动填充。我怎样才能避免它?

我正在渲染这样的视图。

@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