2013-06-01 56 views
1

我是ASP.NET MVC4的新成员,并坚持使用非常基本的东西。ASP.NET MVC3该列不能包含空值

我有这个模型

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实例。

我有一个表书籍与领域的BookIDBOOKNAME。 BookID是主键。所以非常基本。

问题是,当我转到发布视图,在输入字段中输入一个的BookIDBOOKNAME,然后按提交,我总是得到

*列不能包含空值。 [列名= BookID,表名= Books] *例外。唯一的办法就是当我使BookID也是表中的Identity字段时,我当前不想要的。

我在这个简单的结构中错过了什么?

+0

你应该标记与正在使用藏汉实体框架版本的问题,如果没有EF,指出什么是_db是 –

+0

它的实体框架与版本4.3.6 – Dandy

+0

试试这个作为一个属性的BookID [Required,Key,DatabaseGenerated(DatabaseGeneratedOption.None)] –

回答

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); 
} 
+0

是的,这是有效的。但现在我必须在我的所有主键上添加这个DatabaseGenerated(DatabaseGeneratedOption.None),我认为这很奇怪,或者这是它在ASP.NET中的工作方式? – Dandy

+0

@Dandy你也可以在你的DbContext类中做到这一点。它与EF不是ASP.NET有关。 –