【问题标题】:EF Core set XACT_ABORT for all database connectionsEF Core 为所有数据库连接设置 XACT_ABORT
【发布时间】:2020-05-29 06:58:51
【问题描述】:

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

我可以运行它吗?因为我使用的是 AWS RDS,所以我无法在服务器范围内打开它。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server entity-framework entity-framework-core xact-abort


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。如果我使用这种方法,这是否意味着我的所有数据库上下文在某种意义上都变得“瞬态”?因为每次我调用“GetConnection”时都会手动打开一个新连接
    猜你喜欢
    • 2020-04-14
    • 1970-01-01
    • 2021-05-01
    • 2018-02-07
    • 2018-06-22
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多