Нарушение ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект (как обновление существует строк) - PullRequest
0 голосов
/ 21 июня 2019

У меня есть модель класса Profile и DbContext:

public class UserContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Profile> Profiles { get; set; }
    public UserContext() : base("name=UserContext") { }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<UserContext, MigrateDBConfiguration>());
    }
}

public class Profile
{
    [Key]
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [JsonProperty("pk")]
    public long User_Id { get; set; }
    public string username { get; set; }

    [Column("Follower_Id")]
    public ICollection<Profile> Followers { get; set; }

    [Column("Following_Id")]
    public ICollection<Profile> Following { get; set; }
}

Когда я запускаю этот код:

using (UserContext db = new UserContext())
{
    User = db.Users.FirstOrDefault(e => e.Profile.User_Id.Equals(User_Id));

    var profile = (await GetUserInfo(User_Id)).GetResult();
    await GetUserFollowing(profile);
    await GetUserFollowers(profile);

    if (User == null)
    {
        User = db.Users.Add(new User()
        {
            Profile = profile,
            UserName = login
        });                         
    }
    else
    {
        var p = db.Profiles
            .Include("Followers")
            .Include("Following")
            .FirstOrDefault(e => e.User_Id.Equals(User_Id));
        p.Followers = profile.Followers;
        p.Following = profile.Following;    
        User.Profile = p;
    }

    await db.SaveChangesAsync();
}

Я получаю эту ошибку:

Нарушение ограничения PRIMARY KEY 'PK_dbo.Profiles'. Невозможно вставить дубликат ключа в объект 'dbo.Profiles'. Дубликат значения ключа (856399).

1 Ответ

0 голосов
/ 21 июня 2019

Используйте этот атрибут:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Также измените свойства столбца первичного ключа таблицы в спецификации Idendity на Да :

enter image description here

...