0

В C# MVC код первого приложения У меня естьКак создать несколько экземпляров контекста db путем соединения строк?

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

Но имя моего приложения совпадает.

Как создать 2 экземпляра для каждого CarContext в приложениях по их строке подключения к базе данных?

ответ

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; 
    } 
Смежные вопросы