23 Stimmen

Entity Framework auf mehrere Datenbanken (gleiches Schema) zur Laufzeit?

Zuallererst möchte ich sagen, dass ich sehr neu bei EF bin. Mit diesem gesagt, hier ist mein Dilemma:

Es soll eine ASP.NET App auf ASP.NET MVC migriert werden. Ich möchte dafür EF verwenden. Es gibt eine Hauptdatenbank, die "Kundeninformationen" speichert. Außerdem hat jeder "Kunde" seine eigene Datenbank. Dies sind die Beschränkungen, die wir haben.

Derzeit befinden sich die Kundeninformationen in der Haupt-DB, die es mir ermöglicht, für jeden Kunden einen Verbindungsstring zu erstellen und individuelle SQL-Aufrufe zu tätigen.

Wie würde ich dasselbe in Entity Framework erreichen? Jede Datenbank WILL das gleiche Schema haben. Gibt es eine Möglichkeit, den Connection String programmatisch zu wechseln? Diese DBs sind derzeit auf dem gleichen Server, aber das ist keine Voraussetzung und es kann ein völlig anderer Server sein.

Irgendwelche Ideen?

Mehrere Verbindungszeichenfolgen in der Web.config wären der letzte Ausweg. Selbst dann, ich bin nicht sicher, wie genau zu verdrahten diese bis.

Ich danke Ihnen im Voraus.

8voto

Jacob Proffitt Punkte 12454

Wenn Sie eine EntityConnection im Konstruktor Ihres Entity-Objekts verwenden, können Sie die Datenbank ziemlich einfach ändern.

EntityConnection con = new EntityConnection(connString);
con.ChangeDatabase(dbName);
using (Entities context = new Entities(con))
{
    // Some code here
}

5voto

Brandon Punkte 13594

Wenn Sie einen Datenkontext erstellen, können Sie die Verbindungszeichenfolge zur Laufzeit programmatisch ändern, indem Sie die Context.Connection Eigentum:

//Get the connection string from app.config and assign it to sqlconnection string builder
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(((EntityConnection)context.Connection).StoreConnection.ConnectionString);
sb.IntegratedSecurity = false;
sb.UserID ="User1";
sb.Password = "Password1";

//set the object context connection string back from string builder. This will assign modified connection string.
((EntityConnection)context.Connection).StoreConnection.ConnectionString = sb.ConnectionString; 

Entnommen aus: http://sivapinnaka.spaces.live.com/blog/cns!B027EF7E7070AD69!211.entry

2voto

Tillito Punkte 7377

Wenn die Anzahl Ihrer Kunden begrenzt ist und sich die Verbindungszeichenfolgen kaum ändern, könnte ein eleganter Weg darin bestehen, ConfigurationManager.ConnectionStrings zu verwenden, um die benötigte Verbindungszeichenfolge abzurufen.

Wie

string connectionString = ConfigurationManager.ConnectionStrings["Miller"].ConnectionString;
return new Entities(connectionString);

Siehe auch http://msdn.microsoft.com/en-us/library/ms254494.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X