ASP.NET MVC3该列不能包含空值

时间:2013-06-01 11:55:26

标签: entity-framework asp.net-mvc-4

我是ASP.NET MVC4的新手,并坚持使用非常基本的东西。

我有这个模型

public class Book
{
    [Key]
    public int BookID { get; set; }
    public string BookName { get; set; }
}

和发布视图

@{
ViewBag.Title = "Publish";
}
<h2>Publish</h2>

@using (@Html.BeginForm("Publish", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.BookID);
    @Html.TextBoxFor(m => m.BookName);
    <input type="submit" />
}

这样的发布动作方法

 [HttpPost]
    public ActionResult Publish(Book book)
    {
        if (ModelState.IsValid)
        {
            _db.Books.Add(book);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(book);
    }

我正在使用SQL Server Compact 4.0数据库。 _db是DbContext实例。

我有一个表 Books ,其中包含 BookID BookName 字段。 BookID是主键。非常基本。

问题是当我转到发布视图,在输入字段中输入 BookID BookName 并按提交,我总是

*该列不能包含空值。 [列名= BookID,表名=书籍] * 例外。唯一可行的方法是当我将BookID设置为表格中的一个身份字段时,我当前不想要这个字段。

在这个简单的结构中我缺少什么?

1 个答案:

答案 0 :(得分:0)

[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]

属性应该可以解决问题。


或者您也可以在DbContext方法内的OnModelCreating课程中执行此操作。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
      base.OnModelCreating(modelBuilder);

      modelBuilder.Entity<Book>()
                   .Property(r => r.BookID) 
                   .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}