Entity Framework продолжает выдавать повторяющуюся ошибку первичного ключа, несмотря на откатC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Entity Framework продолжает выдавать повторяющуюся ошибку первичного ключа, несмотря на откат

Сообщение Anonymous »

При работе на .NET Framework 4.6.2 у меня есть метод, который использует Entity Framework для вставки строки в таблицу базы данных SQL Server. Он использует транзакцию, откат которой происходит в случае возникновения ошибки:

Код: Выделить всё

public async Task InsertReportRecord(Guid consultantReportId, string code, string studyId, string serverLocation)
{
using (var transaction = _reportRepository.BeginTransaction(IsolationLevel.RepeatableRead))
{
try
{
var record = new Report()
{
ConsultantReportId = consultantReportId,
Code = code,
StudyId = studyId,
RequestedOnUtc = DateTime.UtcNow,
ServerLocation = serverLocation
};

_reportRepository.Add(record);
await _reportRepository.SaveAsync();
transaction.Commit();
}
catch (Exception e)
{
_logger.Error("DB Transaction error, rolling back: " + e);
transaction.Rollback();
}
}
}
Проблема в том, что при попытке вставить повторяющуюся строку я ожидаю, что она просто откатится и продолжит работу. Вместо этого, похоже, он повреждает экземпляр репозитория и приводит к тому, что все будущие попытки вставить запись завершаются той же ошибкой.
То есть:
< ul>
[*]Не удалось вставить строку с идентификатором 123, выдается повторяющаяся ошибка PK (ID = 123) (ожидается в настоящее время)

< li>Попытка вставить совершенно другую строку с идентификатором 456. впоследствии это также терпит неудачу и выдает повторяющуюся ошибку PK (ID = 123), это та часть, которую я не ожидал


Это продолжается часами, пока в конечном итоге ошибка не зафиксируется на другом идентификаторе, с которым произойдет сбой.
Я понимаю, что корень этой проблемы должен заключаться в том, чтобы в первую очередь избегать вставки дубликатов, и я изучаю это. Но я по-прежнему считаю, что этот фрагмент кода должен быть достаточно надежным, чтобы игнорировать ошибку, не допуская сбоев во всех будущих вставках.
Я проверил, как этот метод написан с логикой отката транзакции. многочисленные посты и статьи, и вроде бы так и должно быть, но, должно быть, я что-то упускаю, если это происходит. Любая помощь приветствуется!

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-rollback
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»