如何从 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();
我的场景:
我将 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();