我使用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;
}
}
我知道它还处于测试阶段,但我错过了什么?
感谢您的时间。
答案 0 :(得分:11)
我已经搜索了EF7 sources,看来你对目前的方法是正确的。
连接字符串存储在<button class="facet-button btn-large selected ng-scope keyword-facet" ng-click="removeFacet(sf)" ng-repeat="sf in selectedFacetsList">Arty</button>
// Then I remove 'Arty' from my search
[Then(@"I remove '(.*)' from my search")]
public static void RemoveAFacetButton(string searchName)
{
var button = Driver.Instance.FindElements(By.cssSelector(".selected-facets-slide button"));
var itemToRemove = Driver.Instance.FindElement(By.Name(searchName));
itemToRemove.Click();
}
中。当您致电SqlServerOptionsExtension
the code时如下(仅提取有趣的行):
UseSqlServer(connectionString)
我不确定为什么连接字符串是从显而易见的地方删除的,但可能是devs抽象出连接字符串以允许我们使用非标准数据库(如内存数据库等)。
IMO看起来更加清晰:
var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;
答案 1 :(得分:2)
如果您有完全物化的上下文,您也可以使用:
var conn = context.Database.GetDbConnection();
ConnectionString = conn?.ConnectionString;
conn?.Dispose();