EF Core set XACT_ABORT для всех подключений к базе данных - PullRequest
0 голосов
/ 29 мая 2020

Я использую EF Core 3.1 для подключения к SQL серверу. Я хотел бы, чтобы SET XACT_ABORT ON для SQL сервера был включен для всех подключений, которые я устанавливаю в своем приложении.

Есть ли перехватчик при запуске или создании контекста, который я могу запустить? Поскольку я работаю с AWS RDS, у меня нет возможности включить его на сервере.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 29 мая 2020

Откройте SqlConnection и установите XACT_ABORT ON перед передачей открытого SqlConnection вашему конструктору DbContext. Шаблон для BYO-соединения в ядре EF:

SqlConnection con;
public Db(SqlConnection con) 
{
    this.con = con;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseLoggerFactory(loggerFactory)
                  .UseSqlServer(con, o => o.UseRelationalNulls());

    base.OnConfiguring(optionsBuilder);
}
public override void Dispose()
{
    con.Close();
    base.Dispose();
}

или, если вы используете DI, введите IDbConnectionFactory или что-то подобное и напишите

public Db(IDbConnectionfactory cf) 
{
    this.con = cf.GetConnection();
}

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

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