如何从EF7 DbContext获取ConnectionString

Nic*_*eer 14 c# entity-framework-core asp.net-core-mvc asp.net-core

我的场景:

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

我的问题:

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

它从EF7 变为DatabaseDatabaseFacade类型,并且DbConnection Connection也被删除了.

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

我的研究:

我现在使用的方法是,它有效:

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

    public CustomContext (DbContextOptions options)
        : base(options)
    {
            _connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道它还处于测试阶段,但我错过了一些东西吗?

谢谢你的时间.

iea*_*lle 11

我搜索了EF7 来源,看来你的当前方法是正确的.

连接字符串存储在SqlServerOptionsExtension.当你调用UseSqlServer(connectionString) 代码时如下(只提取有趣的行):

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;
Run Code Online (Sandbox Code Playgroud)

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

这看起来更加清晰IMO:

Configuration.Get("Data:ConnectionString")
Run Code Online (Sandbox Code Playgroud)


Ric*_*ahl 7

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

 var conn = context.Database.GetDbConnection();
 ConnectionString = conn?.ConnectionString;
 conn?.Dispose();
Run Code Online (Sandbox Code Playgroud)