Entity Framework для нескольких баз данных (той же схемы) во время выполнения? - PullRequest
23 голосов
/ 11 августа 2009

Прежде всего, позвольте мне заявить, что я новичок в EF. С учетом сказанного, вот моя дилемма:

Приложение ASP.NET будет перенесено в ASP.NET MVC. Я хотел бы использовать EF для этого. Существует одна основная база данных, в которой хранится «информация о клиенте». Кроме того, у каждого «клиента» есть своя база данных. Вот те ограничения, которые у нас есть.

В настоящее время информация о клиенте в основной БД, позволяющая построить строку подключения для каждого клиента и выполнить отдельные вызовы SQL.

Как бы я выполнил то же самое в Entity Framework? Каждая база данных будет иметь одну и ту же схему. Есть ли способ программно переключить строку подключения? Эти базы данных в настоящее время находятся на одном сервере, но это не является обязательным требованием, и это может быть совершенно другой сервер.

Есть идеи?

Несколько строк подключения в Web.config будут последним средством. Даже тогда я не уверен, как именно это подключить.

Заранее спасибо.

Ответы [ 3 ]

8 голосов
/ 11 августа 2009

Если вы работаете через EntityConnection в конструкторе вашего объекта сущностей, вы можете довольно легко изменить базу данных.

EntityConnection con = new EntityConnection(connString);
con.ChangeDatabase(dbName);
using (Entities context = new Entities(con))
{
    // Some code here
}
5 голосов
/ 11 августа 2009

При создании контекста данных ниже показано, как программно изменить строку подключения во время выполнения, изменив свойство Context.Connection :

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

Взято из: http://sivapinnaka.spaces.live.com/blog/cns!B027EF7E7070AD69!211.entry

2 голосов
/ 02 августа 2011

Если количество ваших клиентов ограничено и строки подключения почти не изменяются, элегантным способом может быть использование ConfigurationManager.ConnectionStrings для получения необходимой строки подключения.

Как

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

Смотрите также http://msdn.microsoft.com/en-us/library/ms254494.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...