在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个数据库:CarDBv1
和CarDBv2
。但是,CarContext类在应用程序中是相同的。
现在,我需要从任何控制台应用程序连接数据库及其上下文(CarContext),并使用它们的表进行转换,读取等。
我在这里找到了类似的答案:https://stackoverflow.com/a/16860878/1534785
但在我的应用程序中,上下文名称是相同的。
如何通过数据库连接字符串为应用程序中的每个CarContext创建2个实例?
答案 0 :(得分: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;
}