ConnectionStringをEF7 DbContextから取得する方法

asp.net-core asp.net-core-mvc c# entity-framework-core

質問

私のシナリオ:

私は標準的なCRUD操作にはEF7を使用し、速度の向上を必要とするより複雑なクエリに対してはDapperを使用しています。 startup.csからDbContextをDALに注入していますが、これは明らかにデータベースクエリを実行します。 Dapperには接続文字列が必要です。私は自分のEF7 DbContext接続文字列をDapperクエリに挿入したい。

私の質問:

以前のようにDbContextから接続文字列を取得するにはどうすればDbContext.Database.Connectionですか? DbContext.Database.Connection

それはから変更DatabaseDatabaseFacade EF7タイプ、およびそれと、 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に見えます:

Configuration.Get("Data:ConnectionString")

人気のある回答

完全にマテリアライズされたコンテキストがある場合は、次のように使用することもできます。

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ