2013-11-28 191 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");