Определите ExecutionStrategy на уровне конфигурации в ядре EF.C#

Место общения программистов C#
Ответить
Anonymous
 Определите ExecutionStrategy на уровне конфигурации в ядре EF.

Сообщение Anonymous »

У меня есть приложение, использующее ядро ​​EF, подключенное к Azure SQL.
Мы столкнулись с отказом устойчивости, и добавление EnableRetryOnFailure() было решением, которое я настроил.

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

services.AddEntityFrameworkSqlServer()
.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DataContext"), sqlServerOptionsAction: sqlActions =>
{
sqlActions.EnableRetryOnFailure(
maxRetryCount: 10,
maxRetryDelay: TimeSpan.FromSeconds(5),
errorNumbersToAdd: null);
}), ServiceLifetime.Transient);
Теперь это не удастся, если у нас возникнет ошибка, выдающая BeginTransaction, как показано ниже.

"Настроенная стратегия выполнения "SqlServerRetryingExecutionStrategy" не поддерживает транзакции, инициированные пользователем. Используйте стратегию выполнения, возвращаемую "DbContext.Database.CreateExecutionStrategy()", чтобы выполнить все операции в транзакции как повторяемую единицу."

Я просмотрел документы MS, и они предлагают способ определить стратегию выполнения вручную с помощью ExecuteAsync.
Это стало проблемой, поскольку у нас есть более 25+ мест, где у нас есть эти транзакции. Я пытался использовать собственную ExecutionStrategy на уровне DbContext, но это не помогло:

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

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured && !string.IsNullOrEmpty(ConnectionString))
{
optionsBuilder.UseSqlServer(ConnectionString, options =>
{
options.ExecutionStrategy((dependencies) =>
{
return new SqlServerRetryingExecutionStrategy(dependencies, maxRetryCount: 3, maxRetryDelay: TimeSpan.FromSeconds(5), errorNumbersToAdd: new List { 4060 });
});
});
}
}
Есть ли способ определить это на глобальном уровне? Нам не нужна разная стратегия для каждой операции: в случае сбоя мы хотим полностью откатить операцию и начать с начала.


Подробнее здесь: https://stackoverflow.com/questions/723 ... in-ef-core
Ответить

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

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

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

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

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