0

在 C# 中,我拥有 MVC 代码第一个应用程序

public class CarContext : DbContext { }

应用程序的第一个版本中的类。连接字符串就像

<add name="CarContext" providerName="System.Data.SqlClient" Integrated Security=true;
connectionString="Data Source=Dragon; Initial Catalog=CarDBv1;"/>

当我运行应用程序时,会创建第一个版本的数据库 - CarDBv1

然后我编辑我的 CarContext 类,例如,添加新表、更改任何属性等、更改应用程序版本、更改连接字符串

Initial Catalog=CarDBv1;Initial Catalog=CarDBv2;运行项目。在这种情况下,我有 2 个数据库:CarDBv1CarDBv2. 但是,CarContext 类在应用程序中是相同的。

现在,我需要从任何控制台应用程序连接数据库及其上下文(CarContext),并使用它们的表进行转换、读取等。

我在这里找到了类似的答案:https ://stackoverflow.com/a/16860878/1534785

但在我的应用程序中,上下文名称是相同的。

如何通过数据库连接字符串为应用程序中的每个 CarContext 创建 2 个实例?

4

1 回答 1

1

您可以使用 DbContext 的重载构造函数来允许上下文指向和未在 app.config 中声明的任意数据库。请参阅带有 dbConnection 的构造函数。

public  class MyDbContext : DbContext, IContextOptions  {
    //ctors
    protected BosBaseDbContext(string connectionName)
        : base(connectionName) {          }

    protected BosBaseDbContext(DbConnection dbConnection, bool contextOwnsConnection)
        : base(dbConnection, contextOwnsConnection) {       }

}

用法

//datasource could be localhost, DBName the catalog name 
new MyDbContext((GetSqlConn4DbName(dataSource,dbName )),true);  


 public DbConnection GetSqlConn4DbName(string dataSource, string dbName) {
        var sqlConnStringBuilder = new SqlConnectionStringBuilder();
        sqlConnStringBuilder.DataSource = String.IsNullOrEmpty(dataSource) ? DefaultDataSource : dataSource;
        sqlConnStringBuilder.IntegratedSecurity = true;
        sqlConnStringBuilder.MultipleActiveResultSets = true;

        var sqlConnFact = new SqlConnectionFactory(sqlConnStringBuilder.ConnectionString);
        var sqlConn = sqlConnFact.CreateConnection(dbName);
        return sqlConn;
    }
于 2013-07-19T07:20:44.167 回答