2013-11-28 6 views
0

Если у меня есть следующий код (например, в конструкторе моего репозитория):Entity Framework изменения базы данных существующих DbContext

var db = new MyDbContext(); 
var entity = db.Set<Customer>(); 

Тогда позже я:

db.Database.Connection.ConnectionString = mySQLconnectionstring; 

мне нужно делать «переустановить» сущность?

+0

Что вы хотите достичь этим? –

+0

Это действительно то, что вы можете просто попробовать и посмотреть, работает ли оно. – Stijn

+0

У меня есть несколько баз данных на основе той же модели, и я хочу изменить базу данных на более позднем этапе. –

ответ

4

Плохая идея. Вы должны создать новый экземпляр контекста:

var db1 = new MyDbContext("connstr1"); 
var db2 = new MyDbContext("connstr2"); 

В противном случае вы получите больше трудностей, чем выгоды вы предположив (если это вообще возможно). Обратите внимание, что каждый экземпляр контекста хранит локальный кеш материализованных объектов и отслеживает их изменения.

Поскольку модель такая же, модель здания (которая является наиболее значительным производительность удар в EF) будет только один раз. Я не могу себе представить, что еще может заставить вас повторно использовать экземпляры контекста.

+0

Является ли строка соединения переданной в dbcontext строкой соединения sql или строкой соединения с сущностью? –

+0

http://msdn.microsoft.com/en-us/data/jj592674.aspx – Dennis

0

, если вы хотите использовать тот же контекст для нескольких базы данных, вы можете сделать это. Один из способов изменяет строку подключения контекста в памяти. перед изменением db, который вы хотите использовать. Назовите этот фрагмент кода:

 var connStr="YOUR_NEW_DB_CONNECTION_STRING_HERE"; 
     var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
     connectionStringsSection.ConnectionStrings["YOUR_DB_CONNECTION_STRING_NAME_EG_CONN_STR"].ConnectionString = connStr; 
     connectionStringsSection.ConnectionStrings["YOUR_DB_CONNECTION_STRING_NAME_EG_CONN_STR"].ProviderName = "System.Data.EntityClient"; 
     config.Save(); 
     ConfigurationManager.RefreshSection("connectionStrings"); 
Смежные вопросы