1

我正在使用 EF Core 3.1 连接到 SQL Server。我想SET XACT_ABORT ON为我在我的应用程序中建立的所有连接启用 SQL Server。

启动或上下文创建是否有我可以运行的挂钩?因为我正在使用 AWS RDS,所以我无法在服务器范围内打开它。

任何帮助,将不胜感激。

4

1 回答 1

0

在将打开的 SqlConnection 传递给 DbContext 构造函数之前,打开 SqlConnection 并设置 XACT_ABORT ON。EF 核心中 BYO 连接的模式是

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 打开和关闭每个命令的连接。这可能会稍微增加连接池的大小,但应该没什么大不了的。

于 2020-05-29T14:40:30.890 回答