Как обрабатывать ошибки в объектах Entity Framework без обновления контекста - PullRequest
0 голосов
/ 03 октября 2018

Некоторые из объектов в нашей настройке имеют уникальные индексы, и они проверяются на бэкэнде с помощью блока try catch, чтобы посмотреть, сработало ли сохранение.

try
{
    await context.MyUniqueEntity.AddAsync(myUniqueEntity);
    var rows = await context.SaveChangesAsync();

    return rows > 0 ? myUniqueEntity : null;
}
catch (DbUpdateException ex)
{
    context.Entry(myUniqueEntity).State = EntityState.Detached;
    throw new Exception("You must provide a unique name", ex.InnerException);
}

Это хорошо для добавления объектов всистема, как указано выше.Однако, когда дело доходит до обновления, блок catch выглядит следующим образом:

context.Entry(myUniqueEntity).State = EntityState.Unchanged;
throw new Exception("You must provide a unique name", ex.InnerException);

И это тоже хорошо работает - один раз.Если пользователь дважды сталкивается с одной и той же проблемой с одним и тем же объектом, это происходит:

Не удается отследить экземпляр типа сущности 'MyUniqueEntity', поскольку другой экземпляр с таким же значением ключа для {'Id '} уже отслеживается.При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа.

Это веб-система, поэтому я не могу действительно остановить свежую копию объекта, извлекаемого каждый раз.И я полагаю, что я мог бы исправить это, получив свежую копию контекста, вместо того чтобы пытаться отбрасывать изменения каждый раз, но я бы предпочел не идти по этому пути.

Есть ли другой способ исправить этот сценарий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...