c# - source - system data sqlclient sqlconnection ejemplo
Obtener SqlConnection de DbConnection (6)
Bueno, si ambos pueden compartir la misma Connection String entonces supongo que ambos son SqlConnection .
Intenta esto en su lugar:
var connection = rep.Database.Connection as SqlConnection;
Tengo un método de Extensión en DbContext donde quiero hacer un SqlBulkCopy . Por lo tanto necesito una SqlConnection . Sin embargo, la conexión de DbContext es del tipo DbConnection . Entre otras cosas intenté esto:
var connection = new SqlConnection( dbContext.Database.Connection.ConnectionString);
El problema es que falta la contraseña (probablemente por razones de seguridad).
Otra cosa que he intentado es la actualización
var bulk_copy = new SqlBulkCopy( (SqlConnection)dbContext.Database.Connection );
Eso en realidad supone que DbConnection es una SqlConnection. En este caso muy específico ya sale mal. Estoy usando el MVC MiniProfiler que envuelve la conexión en un EFProfiledDbConnection . EFProfiledDbConnection no hereda de SqlConnection.
¿Alguna otra idea? ¡Gracias por adelantado!
La única forma en que lo descubrí hasta ahora es usar la biblioteca System.Configuration:
var sqlConnString = ConfigurationManager.ConnectionStrings["your_conn_string_name"].ConnectionString;
var bulkCopy = new SqlBulkCopy(sqlConnString);
Puede verificar el tipo de dbContext.Database.Connection . Si es una EFProfiledDbConnection , puede obtener su propiedad WrappedConnection , que devuelve una DbConnection . Esa es una SqlConnection si usas Sql Server.
Puedes usar el siguiente código:
SqlConnection sqlConn=dbContext.Database.GetConnection<SqlConnection>()
Tuve un problema similar con ProfiledConnection (HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledConnection)
y lo que necesitaba era SqlConnection, esto funcionó:
ProfiledConnection profiledConnection = dbContext.Database.Connection as ProfiledConnection;
SqlConnection sqlConnection = (SqlConnection)profiledConnection.Inner;
Una de las formas posibles de solucionar esto sería agregar Persist Security Info=true a su cadena de conexión.