【问题标题】:EF , SQL Server and duplicate PK errorEF、SQL Server 和重复 PK 错误
【发布时间】:2016-07-29 09:19:52
【问题描述】:

我写了一个程序快一年了,他可以正常工作,但我最近在数据库中添加了一个新项目,但出现错误

违反主键约束“PK_dbo.Accounts”。无法在对象“dbo.Accounts”中插入重复键。重复键值为(110603267)。

我遇到过。没有发生什么特别的事情,我不知道为什么会出现这个错误。 [Key] 的 ID 字段,类型为 long。并且是在数据库中的身份。 这里的意思是,每当您尝试添加新的 Id 项(“110603267”)时,都会发生更改,并且错误是另一个 ID。

使用 ASP.NET MVC,编写 EF。请告知如何解决此问题。感激不尽

我的模型:

public partial class Account
{
    [Key]
    public long ID { get; set; }
    [Required(ErrorMessage = "*")]
    [System.Web.Mvc.Remote("CheckExistUser", "ManageAccount", ErrorMessage = "این نام کاربری قبلا ثبت شده", HttpMethod = "POST")]
    [StringLength(10, MinimumLength = 10, ErrorMessage = "کد ملی 10 رقم می باشد")]
    [Display(Name = "کد ملی")]
    public string Name { get; set; }

    [Display(Name = "رمز عبور")]
    [Required(ErrorMessage = "*")]

    [MinLength(6, ErrorMessage = "حداقل 6 کاراکتر")]

    //[DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "تکرار رمز عبور")]
    [Required(ErrorMessage = "*")]
    // [DataType(DataType.Password)]
    [System.Web.Mvc.Compare("Password", ErrorMessage = "عدم تطابق کلمه عبور")]
    public string PasswordRe { get; set; }
    [Display(Name = "امضا")]
    public string Signature { get; set; }
    [Display(Name="ایمیل")]
    [System.Web.Mvc.Remote("CheckExistEmail", "ManageAccount", ErrorMessage = "این ایمیل قبلا ثبت شده", HttpMethod = "POST")]
    public string Email { get; set; }

    [ForeignKey("GroupID")]
    public virtual Group Group { get; set; }
    public long? GroupID { get; set; }

    [ForeignKey("ActorID")]
    public virtual Actor Actor { get; set; }
    public long? ActorID { get; set; }
    [Display(Name = "شماره همراه")]
    [Required(ErrorMessage = "*")]
    public string Mobile { get; set; }
}

我的代码:

var tempAccount = new Account
{
    Name = tempCodeMeli,
    Password = SecurityManager.HashData(mobile),
    PasswordRe = SecurityManager.HashData(mobile),
    Mobile = mobile,
    IsActive = true,
  _ Date = DateTime.Now
};

dbContext.Accounts.Add(tempAccount);
dbContext.SaveChanges();

【问题讨论】:

  • 需要更多细节,尤其是现有代码。
  • 你能显示一些代码吗?听起来您正在尝试插入一个具有已存在但需要唯一的 Id 的实体。
  • 不要只粘贴所有您的代码。制作minimal reproducible example 来说明您的问题。
  • 写下您的 Account 实体和相关的 db DbContext 部分以及您如何调用它。
  • 重复键意味着您尝试将一系列数据插入到与现有 PK 相同的实体中。通常在执行DBContext.SaveChanges时抛出。

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


【解决方案1】:

运行

SELECT MAX(ID) FROM Accounts

然后如果你得到例如111111111运行

DBCC CHECKIDENT(tbl, RESEED, 111111112)

您的身份列似乎有错误的种子。

另见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多