web-dev-qa-db-ja.com

EF7DbContextからConnectionStringを取得する方法

私のシナリオ:

標準のCRUD操作にはEF7を使用し、速度の向上が必要なより複雑なクエリにはDapperを使用しています。 startup.csから、DbContextをDALに挿入します。これにより、明らかにデータベースクエリが実行されます。 Dapperには接続文字列が必要です。 EF7DbContext接続文字列を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;
    }
}

まだベータ版であることは知っていますが、何かが足りませんか?

御時間ありがとうございます。

14
Nick De Beer

EF7 sources を検索しましたが、現在のアプローチは正しいようです。

接続文字列はSqlServerOptionsExtensionに格納されます。 UseSqlServer(connectionString)コード を呼び出すと、次のようになります(興味深い行のみを抽出):

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

接続文字列が明白な場所から削除された理由はわかりませんが、開発者が接続文字列を抽象化して、非標準のデータベース(インメモリデータベースなど)を使用できるようにした可能性があります。

これははるかに明確なIMOに見えます:

Configuration.Get("Data:ConnectionString")
11
ieaglle

完全に具体化されたコンテキストがある場合は、これを使用することもできます。

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