EF,SQL Server和重复的PK错误

时间:2016-07-29 09:19:52

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

我写了一个程序,差不多有一年他工作正常但我最近在数据库中添加了一个错误的项目

  

违反PRIMARY KEY约束' 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();

1 个答案:

答案 0 :(得分:0)

运行

SELECT MAX(ID) FROM Accounts

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

DBCC CHECKIDENT(tbl, RESEED, 111111112)

好像你的标识栏有错误的种子。

另见this answer