使用实体框架创建新记录时违反主键

本文关键字:新记录 实体 框架 创建 | 更新日期: 2023-09-27 18:00:12

Utter greenhorn在这里!它已经吞噬了我几个小时,但——我希望——对你来说,这将是小菜一碟。我必须首先创建一个数据库(包含一个表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"。无法插入重复项键。该语句已终止。

我已经通过在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; }
}

使用实体框架创建新记录时违反主键

要设置数据库Key的自动增量,可以将Identity属性设置为表定义。

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

或者将ID属性更改为:

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