EF-保存更改-如何解决违反主键约束的问题

时间:2019-05-29 08:45:32

标签: c# sql-server entity-framework

我正在使用Entity Framework将数据添加到sql中的表中。 我有以下添加新记录的类和方法。 但是我收到以下错误。

  

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

public partial class User
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    public string Name { get; set; }

    public string Surname { get; set; }

}        


    public void InsertUser(MyEvent e)
    {
        using (var db = CreateInstance())
        {
            var users = db.Set<User>();
            users.Add(new User
            {
                Name= e.Name,
                Surname= e.Surname                    
            });
            db.SaveChanges();
         }
      }

EF如何自动增加表中的ID?

2 个答案:

答案 0 :(得分:0)

删除DB并将其定义为:

public int Id { get; set; }

没有任何数据注释

答案 1 :(得分:0)

应该是SQL服务器本身增加PK,而不是EF。如果您有多个EF客户端同时将数据插入数据库,则很难确保PK正确增加。使用SQL更容易,您所要做的就是将PK列设置为具有自动增量的标识。

如果PK列是row_id,则可以通过编写脚本来定义它:

[row_id] [int] IDENTITY(1,1) NOT NULL

或者,如果使用SSMS设计器创建表,则在列属性中将“身份规范”设置为:

Is Identity = Yes
Identity Increment = 1
Identity Seed = 1