2013-06-01 54 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有關。 –