tiempo password framework entityconnectionstringbuilder ejecucion create conexion cambiar cadena .net entity-framework runtime

.net - password - entity framework connection string sql server



cambiar el nombre de la base de datos en la cadena de conexión en el tiempo de ejecución en Entity Framework (1)

En mi proyecto, quiero ejecutar algunas pruebas unitarias en la capa DAL que utiliza EntityFramework. Estoy creando a partir de scrips una nueva base de datos antes de cada ejecución de las pruebas (para tener siempre los mismos datos iniciales al realizar las pruebas). Al final de las pruebas, esta base de datos se elimina, (todo se realiza automáticamente con la ayuda de los atributos [ClassInitialize ()] y [ClassCleanup ()]).

La base de datos generada siempre tiene un nombre diferente, algo como TestDB-2009-01-31--12-00-00, para no entrar en conflicto con las bases de datos de prueba de mis colegas.

El problema real que tengo es que no encontré todavía una manera de decirle a EntityFramework que se conecte a la base de datos generada (el nombre se genera en tiempo de ejecución). En este momento se conecta a la cadena de conexión especificada en el archivo app.config, lo cual es normal, por supuesto. Y debido a que estoy haciendo estas pruebas, estoy buscando algo que se pueda hacer desde fuera de la DLL de DAL (sin establecer nada en el contexto de EF directamente).

Cualquier ayuda es muy apreciada.

Gracias.


Cuando cree el ObjectContext, deberá usar la sobrecarga del constructor que toma un ConnectionString como parámetro.

Puede construir este ConnectionString usando un EntityConnectionStringBuilder . Más específicamente, asumiendo que su base de datos subyacente es SQL Server, puede usar un SqlConnectionStringBuilder para generar el valor para EntityConnectionStringBuilder.ProviderConnectionString.

Aquí hay un código que construye la cadena de conexión de SQL Server

var scsb = new SqlConnectionStringBuilder(); scsb.DataSource = "localhost"; scsb.InitialCatalog = "MyDB"; scsb.IntegratedSecurity = true;

Y aquí hay un código que construye el Entity ConnectionString:

var builder = new EntityConnectionStringBuilder(); builder.Metadata = "res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl"; builder.Provider = "System.Data.SqlClient"; builder.ProviderConnectionString = scsb.ConnectionString;