Entity framework ASP.NET MVC3该列不能包含空值
我是ASP.NETMVC4的新手,坚持一些非常基本的东西 我有这个型号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
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);
}