使用实体框架创建新记录时违反主键
本文关键字:新记录 实体 框架 创建 | 更新日期: 2023-09-27 18:00:12
Utter greenhorn在这里!它已经吞噬了我几个小时,但——我希望——对你来说,这将是小菜一碟。我必须首先创建一个数据库(包含一个表book
),然后使用实体框架自动实现基本的CRUD功能。表没有定义主键!
我的问题显然在于ID的生成方式。从一个空数据库开始,我添加第一条记录时没有异常,但无法添加下一条记录,并且BookController
的Create
函数中的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; }