Получить SqlConnection из DbConnection - программирование
Подтвердить что ты не робот

Получить SqlConnection из DbConnection

У меня есть метод расширения на DbContext, где я хочу сделать SqlBulkCopy. Поэтому мне нужно a SqlConnection. Соединение из DbContext происходит от типа DbConnection. Среди нескольких других вещей я пробовал это:

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

Проблема в том, что пароль отсутствует (возможно, из соображений безопасности).

Еще одна вещь, которую я пробовал, - это повышение:

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

Это фактически предполагает, что DbConnection является SqlConnection. В этом конкретном случае это уже идет не так. Я использую MVC MiniProfiler, который завершает соединение в EFProfiledDbConnection. EFProfiledDbConnection не наследуется от SqlConnection.

Любые другие идеи? Спасибо заранее!

4b9b3361

Ответ 1

Ну, если оба могут использовать один и тот же Connection String, то я думаю, что они оба SqlConnection.

Попробуйте это вместо:

var connection = rep.Database.Connection as SqlConnection;

Ответ 2

Одним из возможных способов решения этой задачи было бы добавить Persist Security Info=true к вашей строке соединения.

Ответ 3

Единственным способом, который я обнаружил до сих пор, является использование библиотеки System.Configuration:

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

Ответ 4

У меня была аналогичная проблема с ProfiledConnection (HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledConnection)

и мне нужно было SqlConnection, это сделало трюк:

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

Ответ 5

Вы можете проверить тип dbContext.Database.Connection. Если это EFProfiledDbConnection, вы можете получить его свойство WrappedConnection, которое возвращает DbConnection. Это SqlConnection, если вы используете Sql Server.