2009-08-10 8 views
22

Po pierwsze, pozwólcie mi stwierdzić, że jestem bardzo nowy w EF. Powiedziawszy to, oto mój dylemat:Entity Framework do wielu baz danych (ten sam schemat) w czasie wykonywania?

Zostanie przeniesiona aplikacja ASP.NET do ASP.NET MVC. Chciałbym wykorzystać EF do tego. Istnieje jedna główna baza danych przechowująca "informacje o kliencie". Poza tym każdy "klient" ma własną bazę danych. To są ograniczenia, które mamy.

Obecnie informacje o kliencie w głównej bazie danych, które pozwalają mi budować ciąg połączenia na klienta i wykonywać indywidualne wywołania SQL.

Jak osiągnąć to samo w Entity Framework? Każda baza danych będzie miała ten sam schemat. Czy istnieje sposób programowo przełączać ciąg połączenia? Te bazy danych znajdują się obecnie na tym samym serwerze, ale nie jest to wymagane i może to być zupełnie inny serwer.

Wszelkie pomysły?

Wiele ciągów połączeń w pliku Web.config byłoby ostatecznością. Nawet wtedy nie jestem pewien, jak dokładnie to połączyć.

Z góry dziękuję.

Odpowiedz

5

Podczas tworzenia kontekstu danych, oto jak programowo zmienić ciąg połączenia w czasie wykonywania przez modyfikację Context.Connection właściwość:

//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; 

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

8

Jeśli pracujesz przez EntityConnection w konstruktorze obiektu twoich obiektów, możesz dość łatwo zmienić bazę danych.

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

Jeśli liczba klientów jest ograniczona i ciągi połączeń rzadko się zmieniają, eleganckim sposobem może być użycie ConfigurationManager.ConnectionStrings do retreive ciąg połączenia potrzebne.

Jak

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

Zobacz także http://msdn.microsoft.com/en-us/library/ms254494.aspx

Powiązane problemy