如何从 EF7 DbContext 获取 ConnectionString
Posted
技术标签:
【中文标题】如何从 EF7 DbContext 获取 ConnectionString【英文标题】:How to get ConnectionString from EF7 DbContext 【发布时间】:2015-10-14 13:54:49 【问题描述】:我的场景:
我将 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 的 beta7。 旁注:您应该考虑使用 .FromSql(query) 和 .AsNoTracking() 方法来提高 EF 的查询速度,这样您就不需要在一个项目中使用 Dapper + EF。 你引导我正确。这适用于 me.ctor: public DbContext(DbContextOptions我搜索了 EF7 sources,看来您当前的方法是正确的。
连接字符串存储在SqlServerOptionsExtension
中。当你调用UseSqlServer(connectionString)
the code如下(只提取有趣的行):
var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;
我不确定为什么要从明显的地方删除连接字符串,但可能是开发人员抽象出连接字符串以允许我们使用非标准数据库(如内存数据库等)。
这看起来更清晰 IMO:
Configuration.Get("Data:ConnectionString")
【讨论】:
【参考方案2】:如果你有一个完全物化的上下文,你也可以使用这个:
var conn = context.Database.GetDbConnection();
ConnectionString = conn?.ConnectionString;
conn?.Dispose();
【讨论】:
这很好用,但请记住,打开连接后密码将不再可用,除非连接字符串中的 Persist Security Info 设置为 true。以上是关于如何从 EF7 DbContext 获取 ConnectionString的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET vNext EF7 dbContext 问题
如何使用 ASP.NET Core 从 DbContext 中的 JWT 获取用户名?
在带有 EF7 的 ASP.NET5.0 中添加连接字符串以使用 dll 存储库库(基于 EF6)
如何在静态方法或控制器外的类中获取applicationDbContext的dbContext