2015-06-27 64 views
0

這裏完全是新手!它已經吞噬了我幾個小時,但 - 我希望 - 對你來說,它將是一塊蛋糕。我必須先創建一個數據庫(包含一個表book),然後使用實體框架自動實現基本的CRUD功能。該表確實定義了其主鍵!使用實體框架創建新記錄時違反主鍵

我的問題顯然在於ID的生成方式。建立一個空數據庫開始,我也不例外添加的第一個記錄,但不能添加下一個和BookControllerCreate函數內的db.SaveChanges()指令拋出DbUpdateException

[HttpPost] 
public ActionResult Create(book book) 
{ 
    if (ModelState.IsValid) 
    { 
     db.book.Add(book); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(book); 
} 

的內部異常去如下:

違反PRIMARY KEY約束'PK_book'。無法在對象'dbo.book'中插入重複的 密鑰。該語句已終止。

我已經通過在ID定義之前添加兩個註釋來更改生成的上下文的部分,但它仍然不起作用。

public partial class book 
{ 
    [Key] // added 
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)] // added 
    public int ID { get; set; } 

    public string title { get; set; } 
    public string author { get; set; } 
    public Nullable<int> pages { get; set; } 
    public Nullable<double> price { get; set; } 
    public Nullable<System.DateTime> date { get; set; } 
    public Nullable<bool> access { get; set; } 
} 
+0

這個錯誤意味着您輸入的ID相同的值的兩倍。由於ID是關鍵,它必須是唯一的。 –

+0

@FhahadJameel。是的我知道。我只是認爲添加註釋就足夠了。另一方面,我不確定數據庫與應用程序的合作是怎樣的......是否必須以某種方式在數據庫中明確指定它?如果是這樣,那麼怎麼樣? – dalegor

+0

你的數據庫中是否有自動ID功能設置? – code

回答

0

自動遞增設置爲你的數據庫Key您可以設置Identity屬性爲您的表定義。

[ID] INT IDENTITY (1, 1) NOT NULL 

或更改ID屬性:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int ID { get; set; } 
+0

設置屬性已經完成了。非常感謝 :) – dalegor