Определите 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

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