如何从EF7 DbContext获取ConnectionString

asp.net-core asp.net-core-mvc c# entity-framework-core

我的场景:

我正在使用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 来源 ,看来你对目前的方法是正确的。

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

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

我不确定为什么连接字符串从显而易见的地方删除,但可能是devs抽象出连接字符串以允许我们使用非标准数据库(如内存数据库等)。

这看起来更加清晰IMO:

Configuration.Get("Data:ConnectionString")

热门答案

如果您有完全物化的上下文,您也可以使用:

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


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因