Entity Framework Core генерирует целочисленные значения -ve для столбца первичного ключа в строке таблицы add - PullRequest
1 голос
/ 26 февраля 2020

Я использую EF Core v2.2 для вставки и обновления строк в таблице.

Пока я это делаю, я зацикливаюсь на основе списка и пытаюсь вставить его в таблицу. Для вставки 1-й строки код работает должным образом.

Однако из второго элемента списка строка не вставляется в таблицу.

При отладке я обнаружил, что после _rmsContext.save () 2-й элемент вставляет значение первичного ключа для таблицы как -9223372036854774802.

Вот мой код

foreach (string account in accntList)
{
     var crossBowAccounts = _cbContext.SomeTableRepository
                                      .FindBy(ca => ca.AccountId == account && 
                                                    ca.ClientId == model.ClientId)
                                      .FirstOrDefault();

     AccountHistory accountHistory = new AccountHistory()
                            {
                                AccountId = account,
                                ClientId = model.ClientId,
                                UserId = userId,
                                ActionName = crossBowAccounts == null ? "Add" : "Edit"
                            };

     _rmsContext.AccountHistoryRepository.Add(accountHistory);
     _rmsContext.Save();

     // Some more insert/update code for a table in a different context .
    _rmsContext.Save();
}

Здесь model передается в качестве входных данных для метода.

Это то, что я наблюдал во время отладки:

enter image description here

Это моя схема таблицы

enter image description here

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Похоже, вы решаете эту проблему здесь: https://github.com/dotnet/efcore/issues/6147

EF Core генерирует временные идентификаторы, которые затем заменяются реальными идентификаторами, когда SaveChanges вызывается

Это не совсем ошибка, и она была снова изменена в 3.1.

Так что, пока элемент не вставлен, имеет смысл отрицательное и / или случайное число. Вам нужно понять, почему он не вставлен (отрицательный идентификатор не является причиной).

1 голос
/ 26 февраля 2020

это не ошибка, идентификатор генерируется случайным образом перед вызовом SaveChanges метода. Если вы выполните отладку после SaveChanges, идентификатор будет правильным.

...