web-dev-qa-db-ja.com

DbConnectionからSqlConnectionを取得する

DbContextにExtensionメソッドがあり、SqlBulkCopyを実行します。したがって、SqlConnectionが必要です。 DbContextからの接続は、タイプDbConnectionからのものです。他のいくつかのものの中で私はこれを試しました:

var connection = new SqlConnection( dbContext.Database.Connection.ConnectionString);

問題は、パスワードが欠落していることです(おそらくセキュリティ上の理由から)。

私が試した別のことはアップキャストです:

var bulk_copy = new SqlBulkCopy( (SqlConnection)dbContext.Database.Connection );

実際には、DbConnectionはSqlConnectionであると想定しています。この非常に特殊なケースでは、すでに問題が発生しています。接続をEFProfiledDbConnectionにラップするMVC MiniProfilerを使用しています。 EFProfiledDbConnectionはSqlConnectionを継承しません。

他のアイデアはありますか?前もって感謝します!

24
Dirk Boer

まあ、両方が同じを共有できる場合Connection Stringそれでは、どちらもSqlConnectionだと思います。

代わりにこれを試してください:

var connection = rep.Database.Connection as SqlConnection;
19
haim770

これを回避する可能な方法の1つは、接続文字列にPersist Security Info=trueを追加することです。

7
Wiktor Zychla

ProfiledConnection(HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledConnection)で同様の問題が発生しました

そして私が必要としたのはSqlConnectionでした、これはトリックをしました:

ProfiledConnection profiledConnection = dbContext.Database.Connection as ProfiledConnection;
SqlConnection sqlConnection = (SqlConnection)profiledConnection.Inner;
3
Rafal Winnik

これまでに見つけた唯一の方法は、System.Configurationライブラリを使用することです。

var sqlConnString = ConfigurationManager.ConnectionStrings["your_conn_string_name"].ConnectionString;
var bulkCopy = new SqlBulkCopy(sqlConnString);
2
Arvis

dbContext.Database.Connectionのタイプを確認できます。 EFProfiledDbConnectionの場合は、WrappedConnectionプロパティを取得してDbConnectionを返すことができます。 SQL Serverを使用している場合、これはSqlConnectionです。

1
Gert Arnold