违反PRIMARY KEY约束。无法插入重复键

时间:2015-10-05 13:50:42

标签: asp.net sql-server

我是ASP.Net MVC的新手。我刚刚开始学习它,所以请帮助我,因为我被困在一个地方。早期的回应将受到高度赞赏。 我正在制作一个注册页面。 使用App_data添加了一个SQL数据库.Below是表定义:

CREATE TABLE [dbo].[RegisterModel]
(
    [Id] INT NOT NULL primary key , 
    [UserName] VARCHAR(50) NOT NULL, 
    [Email] VARCHAR(50) NOT NULL, 
    [Password] VARCHAR(50) NOT NULL, 
    [ConfirmPassword ] VARCHAR(50) NOT NULL,

)

然后为其添加了ADO.Net Entity数据模型。 然后我创建了一个控制器帐户,其操作方法索引如下:

public class AccountController : Controller
    {
        //
        // GET: /Account/
    public ActionResult Index()
    {
        //using (dbRegisterModelEntities dc = new dbRegisterModelEntities())
        //{
            return View();

        }

    [HttpPost]
    public ActionResult Index(RegisterModel user)
    {
        if (ModelState.IsValid)
        {
            using (dbRegisterModelEntities dc = new dbRegisterModelEntities())
            {
                dc.RegisterModels.Add(user);
                dc.SaveChanges();
                return RedirectToAction("Index", "Account");

            }
        }
          return View(user);

      }

创建一个用户后,现在我收到错误:

  

违反PRIMARY KEY约束' PK__tmp_ms_x__3214EC0778D493BE'。   无法在对象' dbo.RegisterModel'中插入重复键。该   重复键值为(0)。声明已经终止。

当我尝试添加第二个用户时,会出现此错误。

3 个答案:

答案 0 :(得分:1)

您应该将id声明为标识或为每个用户设置不同的值

CREATE TABLE [dbo].[RegisterModel]
(
    [Id] INT NOT NULL primary key  IDENTITY(1,1) , 
    [UserName] VARCHAR(50) NOT NULL, 
    [Email] VARCHAR(50) NOT NULL, 
    [Password] VARCHAR(50) NOT NULL, 
    [ConfirmPassword ] VARCHAR(50) NOT NULL,
)

答案 1 :(得分:0)

您的主键应该是一个标识列,每次递增1。

CREATE TABLE [dbo].[RegisterModel]
(
    [Id] INT NOT NULL IDENTITY(1,1) , 
    [UserName] VARCHAR(50) NOT NULL, 
    [Email] VARCHAR(50) NOT NULL, 
    [Password] VARCHAR(50) NOT NULL, 
    [ConfirmPassword ] VARCHAR(50) NOT NULL,
    CONSTRAINT PK_RegisterModel PRIMARY KEY
    (
       Id
    ) 
);

答案 2 :(得分:0)

只需从表格和模型中删除ID列:

CREATE TABLE [dbo].[RegisterModel]
(
    [UserName] VARCHAR(50) NOT NULL PRIMARY KEY, 
    [Email] VARCHAR(50) NOT NULL, 
    [Password] VARCHAR(50) NOT NULL, 
    [ConfirmPassword ] VARCHAR(50) NOT NULL
);

用户名必须是唯一的,因此您已有一个关键字段。