2015-06-27 85 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