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

Entity framework ASP.NET MVC3该列不能包含空值,entity-framework,asp.net-mvc-4,Entity Framework,Asp.net Mvc 4,我是ASP.NETMVC4的新手,坚持一些非常基本的东西 我有这个型号 public class Book { [Key] public int BookID { get; set; } public string BookName { get; set; } } 和一个发布视图作为 @{ ViewBag.Title = "Publish"; } <h2>Publish</h2> @using (@Html.BeginForm("Publish

我是ASP.NETMVC4的新手,坚持一些非常基本的东西

我有这个型号

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" />
}
我正在使用SQL Server Compact 4.0数据库_db是DbContext实例

我有一个带有BookID和BookName字段的表Books。BookID是主键。所以很基本

问题是,当我转到“发布”视图时,在输入字段中输入一个图书ID书名,然后按“提交”,我总是得到

*该列不能包含空值。[列名=图书ID,表名=图书]*异常。唯一可行的方法是,我将BookID设置为表中的一个标识字段,这当然是我目前不想要的


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

[必需,键,数据库生成(DatabaseGeneratedOption.None)]

属性应该起作用


或者也可以在
OnModelCreating
方法中的
DbContext
类中执行此操作

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

      modelBuilder.Entity<Book>()
                   .Property(r => r.BookID) 
                   .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.Property(r=>r.BookID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}

您可能也应该用您正在使用的实体框架版本来标记此问题,或者如果不是EF,请指出什么是它的实体框架,版本为4.3.6请将此作为BookID的属性[Required,Key,DatabaseGenerated(DatabaseGenerateOption.None)]@emrenevayeshirazi谢谢。现在它可以按预期工作了。你能解释一下原因吗?我是否必须将DatabaseGeneratedOption(DatabaseGeneratedOption.None)放在我的每个主键上?是的,这很有效。但是现在我必须在我所有的主键上添加这个DatabaseGenerated(DatabaseGenerateOption.None),我认为这很奇怪,或者这就是它在ASP.NET中的工作方式?@Dandy你也可以在你的DbContext类中这样做。它与EF有关,而不是ASP.NET。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
      base.OnModelCreating(modelBuilder);

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