C# asp.net |如何向数据库添加数据';下一个身份证是什么?

C# asp.net |如何向数据库添加数据';下一个身份证是什么?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我最近开始学习编程/asp.net web应用程序,遇到了一个小问题 我有一个由两个属性组成的类-字符串名称和字节Id 我正在尝试通过web app将数据添加到我的数据库(添加名称),它将名称添加到id 0,而不是添加到下一个id(如果有3个id和3个名称,我希望将新名称添加到id 4等) 我认为问题是因为在我的类中,id被初始化为字节而不是int?我想它不能加上?。(我有另一个“add方法”用于另一个类,所有的东西都在那里工作,唯一的区别是另一个id是int) 我的savind数据代码:

我最近开始学习编程/asp.net web应用程序,遇到了一个小问题

我有一个由两个属性组成的类-字符串名称和字节Id

我正在尝试通过web app将数据添加到我的数据库(添加名称),它将名称添加到id 0,而不是添加到下一个id(如果有3个id和3个名称,我希望将新名称添加到id 4等)

我认为问题是因为在我的类中,id被初始化为字节而不是int?我想它不能加上?。(我有另一个“add方法”用于另一个类,所有的东西都在那里工作,唯一的区别是另一个id是int)

我的savind数据代码:

    [Authorize]
    [HttpPost]
    public ActionResult AddCategory(CategoryFormViewModel viewModel)
    {
        var id = _context.Category.Max(p => p.Id);
        var category = new Category
        {
            Id = id++,
            Name = viewModel.Name
        };

        _context.Category.Add(category);
        _context.SaveChanges();

        return RedirectToAction("Index", "Home");
    }
有了这段代码,我得到了一个例外,它试图将数据添加到现有id(最新的),我尝试更改
“id=”
,我尝试了
“id=viewModel.id”
,但随后它添加到id 0,也许有人可以帮助我:),提前

错误:

异常详细信息:System.Data.SqlClient.SqlException:违反 主键约束“PK_dbo.categoris”。无法插入重复的密钥 在对象“dbo.categoris”中。重复的键值为(4)。这个 声明已终止


创建新记录时,它具有
id=0
,并且在
\u context.SaveChanges()
之后,您的记录将进入数据库,在该数据库中,id接收到适当的值。但它必须是身份

您的问题在于
i++
中:

 var category = new Category
 {
     Id = id++,
     Name = viewModel.Name
 };
id++
返回
id
的值,然后将其递增1。这意味着您正在尝试插入数据库中已存在的最大值。相反,您应该使用以下任一选项:

++id 
如果要增加
id的值

或:


如果您不知道。

当您遇到错误并询问有关该错误的问题时,您需要包括该错误。在运行时发生的错误—在这种情况下称为
异常
(这就是错误在.net中的表现形式)。包括
消息
类型
堆栈跟踪
,并在
内部异常
中递归重复此操作。使用你问题上的链接包含该细节,不要将其作为评论。请同时阅读。不要试图在代码中指定ID。如果您使用的是SQL Server,请指定ID列为标识列,并且将自动生成密钥。@PanagiotisKanavos的可能重复项我尝试在代码中不指定ID,并且我的ID列被识别为密钥,但是出现了相同的问题-当我保存更改时,每次它都保存为值为0的ID,我也尝试过添加数据注释,但仍然是一样的,也许我不明白什么?检查重复的问题和任何实体框架教程。啊,谢谢,这确实有效,虽然我不确定这是否是正确的方法,但我会尝试找出它,现在这很有效,所以谢谢!当你没有两个用户同时尝试做同样的事情时,它就会起作用。让SQL处理ID的创建是有原因的…@SBFrancies不需要GUI。这段代码完全是错误的,并且后增量法没有什么错。Pre或post,下一次运行此代码时,变量将初始化为0,并将创建相同的值。即使您从数据库加载
id
,例如使用
MAX(id)
,如果有人删除最后一条记录,它仍然会生成错误的值。使用自动生成的ID是不正确的trivial@ems19不,它不起作用。如果具有最大ID的记录被删除,则最终会导致关系中断。永远不要使用这样的工具technique@emw19描述了正确的方法。一行。
id + 1