cambiare nome db nella stringa di connessione in fase di runtime in Entity Framework

Nel mio progetto, voglio eseguire alcuni test di unità su DAL livello di utilizzo di entity framework. Sto creando da scrips un nuovo database prima di ogni esecuzione del test (in modo da avere sempre gli stessi dati iniziali quando si fa il test). Alla fine del test, questo database è caduto, (tutto è fatto automaticamente con l’aiuto di [ClassInitialize()] e [ClassCleanup()] attributi.

Database generato sempre ha un nome diverso, qualcosa di simile a TestDB-2009-01-31–12-00-00, al fine di non conflitto con il database di test dei miei colleghi.

Il vero problema che ho è che non ho trovato ancora un modo per dire EntityFramework per connettersi a un database generato (il nome è generato a runtime). Ora collega la stringa di connessione specificato nell’app.file di configurazione, che è normale, ovviamente. E perché io sto facendo queste prove, sto cercando qualcosa che può essere fatto da fuori DAL dll (senza impostare nulla sul EF contesto direttamente).

Qualsiasi aiuto è molto apprezzato.

Grazie.

InformationsquelleAutor Lucian | 2009-09-29



One Reply
  1. 39

    Quando si crea l’ObjectContext, sarà necessario utilizzare l’overload del costruttore che prende una ConnectionString come parametro.

    Si può costruire questo ConnectionString utilizzando un EntityConnectionStringBuilder. Più precisamente, assumendo che il sottostante database di SQL Server, è possibile utilizzare un SqlConnectionStringBuilder per costruire il valore per EntityConnectionStringBuilder.ProviderConnectionString.

    Qui è una parte di codice che genera la stringa di connessione SQL Server

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

    Ed ecco il codice che genera l’Entità 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;

Lascia un commento