如何從EF7 DbContext獲取ConnectionString


我的場景:

我正在使用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 來源 ,看來你對目前的方法是正確的。

連接字符串存儲在SqlServerOptionsExtension 。當您調用UseSqlServer(connectionString) ,代碼如下(僅提取有趣的行):

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;

我不確定為什麼連接字符串從顯而易見的地方刪除,但可能是devs抽像出連接字符串以允許我們使用非標準數據庫(如內存數據庫等)。

這看起來更加清晰IMO:

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;

熱門答案

如果您有完全物化的上下文,您也可以使用:

 var conn = context.Database.GetDbConnection();
 ConnectionString = conn?.ConnectionString;
 conn?.Dispose();




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因