2013-11-28 229 views
0

如果我有下面的代碼(例如,在我的倉庫的構造函數):實體框架更改數據庫

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

如果你想爲多個數據庫使用相同的上下文,你可以這樣做。 一種方法是更改​​內存中上下文的連接字符串。 更改您想要使用的數據庫之前。撥打這段代碼:

 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");