usar source query new net example ejemplo data conn c# sql entity-framework connection-string mvc-mini-profiler

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.