如何从EF7 DbContext获取ConnectionString

时间:2015-10-14 13:54:49

标签: c# asp.net-core asp.net-core-mvc 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;
    }
}

我知道它还处于测试阶段,但我错过了什么?

感谢您的时间。

2 个答案:

答案 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();