標準の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;
}
}
まだベータ版であることは知っていますが、何かが足りませんか?
御時間ありがとうございます。
EF7 sources を検索しましたが、現在のアプローチは正しいようです。
接続文字列はSqlServerOptionsExtension
に格納されます。 UseSqlServer(connectionString)
コード を呼び出すと、次のようになります(興味深い行のみを抽出):
var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;
接続文字列が明白な場所から削除された理由はわかりませんが、開発者が接続文字列を抽象化して、非標準のデータベース(インメモリデータベースなど)を使用できるようにした可能性があります。
これははるかに明確なIMOに見えます:
Configuration.Get("Data:ConnectionString")
完全に具体化されたコンテキストがある場合は、これを使用することもできます。
var conn = context.Database.GetDbConnection();
ConnectionString = conn?.ConnectionString;
conn?.Dispose();