导航属性可以有[必需]属性吗?

时间:2013-01-31 23:39:38

标签: asp.net-mvc entity-framework ef-code-first

我正在使用Code First学习asp.net mvc ....

我有一个名为Livro的课程:

这是代码

    public class Livro
    {

    [Key]
    public int LivroId { get; set; }

    [Required(ErrorMessage = "E necessario titulo")]
    [MaxLength(100, ErrorMessage = "Titulo deve ter no maximo 100 caracteres")]
    public string Titulo { get; set; }


    public int AutorID { get; set; }

    public virtual Autor Autor { get; set; }
  }

如您所见,它有一个名为Autor的导航属性和名为AutorId的FK。但我在Livro控制器上有这个代码(我没有写这个代码,VS根据我的类创建)。

    [HttpPost]
    public ActionResult Create(Livro livro)
    {
        if (ModelState.IsValid)
        {
            db.Livros.Add(livro);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.AutorID = new SelectList(db.Autores, "AutorId", "Nome", livro.AutorID);
        return View(livro);
    }

如果我在[Required]属性上有Autor,则modelState.IsValid会变为false,因为livro.Autor null 。所以我必须把它拿出来。

但我正在读Julia Lerman的一本书,称其为“编程EF Code-First”和 有时候会有[Required]属性的导航属性。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

这可能是因为View仅引用Livro字段,而不是Autor,并且模型绑定器无法创建Autor导航属性。您可以使用这样的smth为Autor创建字段:

@Html.TextBoxFor(m => m.Autor.AutorID);
@Html.TextBoxFor(m => m.Autor.AutorName);

然而,这将变得很痛苦,也许你只需要从列表中选择作者。我只会将Required属性添加到Livro.AutorID属性,并按原样保留Autor