如何从 EF7 DbContext 获取 ConnectionString

How to get ConnectionString from EF7 DbContext

我的场景:

我将 EF7 用于标准 CRUD 操作,将 Dapper 用于需要提高速度的更复杂查询。从 startup.cs 我将我的 DbContext 注入我的 DAL,这显然会进行数据库查询。 Dapper 需要一个连接字符串。我想将我的 EF7 DbContext 连接字符串注入 Dapper 查询。

我的问题:

如何像以前一样从 DbContext 获取连接字符串:DbContext.Database.Connection?

它在 EF7 中从 Database 更改为 DatabaseFacade 类型,并且 DbConnection Connection 也被删除。

DbContext 中应该有一些我可以查询的持久连接字符串?

我的研究:

我目前使用的方法是,而且有效:

public partial class CustomContext : DbContext
{
    public readonly string _connectionString;

    public CustomContext (DbContextOptions options)
        : base(options)
    {
            _connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
    }
}

我知道它仍处于测试阶段,但我是否遗漏了什么?

感谢您的宝贵时间。

我搜索了 EF7 sources,您目前的方法似乎是正确的。

连接字符串存储在 SqlServerOptionsExtension 中。当您调用 UseSqlServer(connectionString) the code 时如下(仅提取有趣的行):

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;

我不确定为什么从明显的地方删除了连接字符串,但可能是开发人员提取了连接字符串以允许我们使用非标准数据库(如内存数据库等)。

在我看来,这看起来更清晰了:

Configuration.Get("Data:ConnectionString")

如果你有一个完全具体化的上下文,你也可以使用这个:

 var conn = context.Database.GetDbConnection();
 ConnectionString = conn?.ConnectionString;
 conn?.Dispose();