使用实体框架

时间:2015-06-27 23:34:22

标签: c# entity-framework asp.net-mvc-4

这里的新手!它已经吞噬了我几个小时,但是 - 我希望 - 对你来说它将是一块蛋糕。我必须首先创建一个数据库(包含一个表book),然后使用Entity Framework自动实现基本的CRUD功能。该表确实已定义其主键!

我的问题显然在于生成ID的方式。从空数据库开始,添加第一条记录时没有异常,但无法添加下一条记录,而db.SaveChanges()函数Create内的BookController指令会引发DbUpdateException:< / p>

[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; }
}

1 个答案:

答案 0 :(得分:1)

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

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

或者将ID属性更改为:

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