DB-Name in Verbindungszeichenfolge zur Laufzeit in Entity Framework ändern

.net entity-framework runtime

Frage

In meinem Projekt möchte ich einige Komponententests auf der DAL-Schicht ausführen, die EntityFramework verwendet. Ich erstelle aus Scrips eine neue Datenbank vor jeder Ausführung der Tests (um immer die gleichen Anfangsdaten zu haben, wenn die Tests durchgeführt werden). Am Ende der Tests wird diese Datenbank gelöscht (alles wird automatisch mit Hilfe der Attribute [ClassInitialize ()] und [ClassCleanup ()) erstellt.

Die generierte Datenbank hat immer einen anderen Namen, etwa TestDB-2009-01-31--12-00-00, um nicht mit den Testdatenbanken meiner Kollegen in Konflikt zu geraten.

Das eigentliche Problem, das ich habe, ist, dass ich noch keine Möglichkeit gefunden habe, EntityFramework mit der generierten Datenbank zu verbinden (der Name wird zur Laufzeit generiert). Im Moment stellt es eine Verbindung zu der in der Datei app.config angegebenen Verbindungszeichenfolge her, was natürlich normal ist. Und weil ich diese Tests durchführe, suche ich nach etwas, das von außerhalb der DAL-DLL durchgeführt werden kann (ohne irgendetwas direkt im EF-Kontext festzulegen).

Jede Hilfe wird sehr geschätzt.

Vielen Dank.

Akzeptierte Antwort

Wenn Sie den ObjectContext erstellen, müssen Sie die Konstruktorüberladung verwenden, die einen ConnectionString als Parameter verwendet.

Sie können diesen ConnectionString mithilfe eines EntityConnectionStringBuilder erstellen . Unter der Annahme, dass Ihre zugrunde liegende Datenbank SQL Server ist, können Sie einen SqlConnectionStringBuilder verwenden , um den Wert für EntityConnectionStringBuilder.ProviderConnectionString aufzubauen.

Hier ist etwas Code, der die SQL Server-Verbindungszeichenfolge aufbaut

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

Und hier ist ein Code, der den Entity ConnectionString aufbaut:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum