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.