C# 实体框架更改现有DbContext的数据库

C# 实体框架更改现有DbContext的数据库,c#,entity-framework,C#,Entity Framework,如果我有以下代码(例如,在我的存储库的构造函数中): 是否需要“重新设置”实体?坏主意。您应该创建新的上下文实例: var db1 = new MyDbContext("connstr1"); var db2 = new MyDbContext("connstr2"); 否则,你会遇到比你想象的更多的困难(如果可能的话)。请注意,每个上下文实例都保留物化实体的本地缓存并跟踪它们的更改 因为模型是相同的,所以模型构建(这是EF中最重要的性能影响)只会发生一次。我无法想象,还有什么能迫使您重新使用

如果我有以下代码(例如,在我的存储库的构造函数中):


是否需要“重新设置”实体?

坏主意。您应该创建新的上下文实例:

var db1 = new MyDbContext("connstr1");
var db2 = new MyDbContext("connstr2");
否则,你会遇到比你想象的更多的困难(如果可能的话)。请注意,每个上下文实例都保留物化实体的本地缓存并跟踪它们的更改


因为模型是相同的,所以模型构建(这是EF中最重要的性能影响)只会发生一次。我无法想象,还有什么能迫使您重新使用上下文实例。

坏主意。您应该创建新的上下文实例:

var db1 = new MyDbContext("connstr1");
var db2 = new MyDbContext("connstr2");
否则,你会遇到比你想象的更多的困难(如果可能的话)。请注意,每个上下文实例都保留物化实体的本地缓存并跟踪它们的更改


因为模型是相同的,所以模型构建(这是EF中最重要的性能影响)只会发生一次。我无法想象,还有什么能迫使您重新使用上下文实例。

如果您想对多个数据库使用相同的上下文,您可以这样做。 一种方法是更改内存中上下文的连接字符串。 在更改要使用的数据库之前。将这段代码称为:

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

如果您想对多个数据库使用相同的上下文,可以这样做。 一种方法是更改内存中上下文的连接字符串。 在更改要使用的数据库之前。将这段代码称为:

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

编写新的类文件并将此方法添加到上下文中

public partial class YourEntitities
{
    public void SetDatabase(string dataBase)
    {
        string connString = Database.Connection.ConnectionString;
        Regex rgx = new Regex(@"(?<=initial catalog=)\w+");
        string newconnString = rgx.Replace(connString, dataBase);
        //string  = connString.Replace("{database}", dataBase);
        Database.Connection.ConnectionString = newconnString;
    }
}
公共部分类YourEntities
{
公共数据库(字符串数据库)
{
string connString=Database.Connection.ConnectionString;

Regex rgx=newregex(@“(?编写新类文件并将此方法添加到上下文中

public partial class YourEntitities
{
    public void SetDatabase(string dataBase)
    {
        string connString = Database.Connection.ConnectionString;
        Regex rgx = new Regex(@"(?<=initial catalog=)\w+");
        string newconnString = rgx.Replace(connString, dataBase);
        //string  = connString.Replace("{database}", dataBase);
        Database.Connection.ConnectionString = newconnString;
    }
}
公共部分类YourEntities
{
公共数据库(字符串数据库)
{
string connString=Database.Connection.ConnectionString;

正则表达式rgx=新正则表达式(@“(?你想通过它实现什么?你可以试着看看它是否有效。我有多个基于同一模型的数据库,我想在以后的阶段更改数据库。为什么不为每个数据库创建另一个
上下文
?你想通过它实现什么?你可以试着看看是否有效它可以工作。我有多个基于同一模型的数据库,我想在稍后阶段更改数据库。为什么不为每个数据库创建另一个
上下文
?传递给dbcontext的connectionstring是sql连接字符串还是实体连接字符串?传递给dbcontext的connectionstring是sql连接字符串吗r实体连接字符串?