Работа с .NET 8, EF (и SQL Server) и версией строки параллелизма [дубликат] ⇐ C#

Место общения программистов C#
Anonymous
Работа с .NET 8, EF (и SQL Server) и версией строки параллелизма [дубликат]

Сообщение Anonymous »

Я пытаюсь работать с EF и SQL Server. Все работает хорошо, но....
Сейчас я использую rowversion () в моей сущности. Я получаю на свой контроллер конкретный идентификатор продукта, описание и версию строки (поскольку мы передали версию строки из извлечения).
Мы нашли несколько разных способов правильно использовать проверку параллелизма, хотя я еще не уверен.
Это - для меня - самая чистая часть (да, я пропустил некоторые части для простоты, устройства отображения e.q., репозитории, проверка и т. д. и т. д.):

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

public async Task
 UpdateAsync(string id, byte[] version, CancellationToken cancellationToken)
{
var product = await context.Products.FirstAsync(e => e.Id == id, cancellationToken);
product.DescrLg = "nope";
product.Version = version; //now setting this in my mapper.
//context.Entry(product).Property(p => p.Version).OriginalValue = version; //this is placed in the interceptor, so EF can correctly do the rowversioning check.

context.Products.Update(product);
await context.SaveChangesAsync(cancellationToken);
return new Product(product.Id, product.DescrLg, product.Version); //this is a different viewModel
}
Я изменил подход к использованию подхода-перехватчика, потому что в своих картографах я не хочу использовать контекст, а просто простое сопоставление.
дубликат отметки: Can't Catch DbUpdateConcurrencyException означает невозможность получить исключение параллелизма, это не тот случай. Я могу получить исключение параллелизма (по желанию), вопрос в том, является ли это лучшим подходом.
Мы все считаем, что с EF EF должен иметь возможность определять версию строки< /code> и параллелизм без необходимости установки старой/исходной версии поля. Я ожидал бы от EF чего-то более умного или надеялся, что установки rowversion будет достаточно...
Есть ли лучшие альтернативы?

Подробнее здесь: https://stackoverflow.com/questions/791 ... rowversion

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