Entity Framework Core: Нарушение ограничения PRIMARY KEY Невозможно вставить дубликат ключа в объект - PullRequest
2 голосов
/ 07 мая 2019

Я получаю следующую ошибку при вставке записей в дочернюю таблицу: почему Entity Framework Core пытается вставить запись в родительскую таблицу (таблицу IdentityUser), когда я прошу ее вставить запись в дочернюю таблицу (Ключевые словаТаблица)?

StackTrace:

An unhandled exception occurred while processing the request.
SqlException: Violation of PRIMARY KEY constraint 'PK_IdentityUser'. Cannot insert duplicate key in object 'dbo.IdentityUser'. The duplicate key value is (39b72c3a-b5bf-43e4-84f9-5cddbe79f6e3).
The statement has been terminated.

Модель:

public class Keyword
  {
    public Keyword() { }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int KeywordId { get; set; }
    public IdentityUser User { get; set; }
    public string Value { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
  }

Код для сохранения записей в таблице ключевых слов:

    var keywords = new List<Keyword>();
var identityUser = await UserManager.GetUserAsync(User);
              foreach (var keywordString in keywordsThatNeedToBeSaved)
              {
                keywords.Add(new Keyword()
                {
                  User = identityUser,
                  Value = keywordString
                });
              }
              ScrubberDbContext.Keywords.AddRange(keywords);
                await ScrubberDbContext.SaveChangesAsync();

enter image description here enter image description here enter image description here

1 Ответ

5 голосов
/ 07 мая 2019

Измените класс ключевого слова на:

public class Keyword
    {
        public Keyword() { }
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int KeywordId { get; set; }
        public int? UserId { get; set; }
        [ForeignKey("UserId")]
        public IdentityUser User { get; set; }
        public string Value { get; set; }
        [Timestamp]
        public byte[] RowVersion { get; set; }
    }

и измените запись сохранения на:

var keywords = new List<Keyword>();
 var identityUser = await UserManager.GetUserAsync(User);
              foreach (var keywordString in keywordsThatNeedToBeSaved)
              {
                keywords.Add(new Keyword()
                {
                  UserId = identityUser.Id,
                  Value = keywordString
                });
              }
              ScrubberDbContext.Keywords.AddRange(keywords);
                await ScrubberDbContext.SaveChangesAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...