0

Мой проект (WPF, .Net 4.5, EF6) должен ориентироваться на разные СУБД, до сих пор это MSSQL, Oracle, MySql и Firebird. Я начал с создания dbs-зависимых скриптов, которые генерируют базу данных, а затем использовали Entity Frameworks Database-First-approach для создания моделей. Имея стандартную edmx на основе MSSQL и создавая отдельные ssdls для других поставщиков (различные ssdl-файлы могут быть настроены в строках соединения), все это работало довольно хорошо для всех dbms. Проблема, которую я вижу сейчас, заключается в поддержке установки/обновления для 4 или более разных dbms для еще многих клиентов. Мы не будем отправлять администраторам для установки обновлений у наших клиентов, нам скорее нужно что-то вроде общей процедуры настройки/обновления для всех. Это возможно, но вам нужно будет поддерживать разные версии sql-скриптов для каждого dbms и своего рода инструмента установки, который обрабатывает эти сценарии и знает, какие из них будут выполняться для какой базы данных (в зависимости от dbms и текущей версии).Ориентация на различные системы баз данных с EF6 (и первые миграции кода)

При поиске альтернатив я столкнулся с EF Code First Migrations и попытался переключиться на этот подход. Мои попытки основаны на MSSQL и MySql.

Все работает хорошо, когда я придерживаюсь MSSQL или MySql. Создавая миграцию, применяя их к существующим или не существующим базам данных, все это работает очень хорошо. Но я застрял в объединении обеих систем. Например, применение MSSQL-миграций к MySql представляется невозможным. База данных будет создана, но невозможно подключиться из-за несоответствий типов и т. Д. Я предполагаю, что «__Migration» -Table содержит модель, которая была создана на основе MSSQL и теперь несовместима с MySql-провайдером. Просто теория, но, может быть, кто-то знает лучше.

Кто-нибудь знает, как это можно решить? Есть ли способ нацеливаться на разные dbms с EF? Я не могу поверить, что я единственный с этой проблемой, но очень сложно найти информацию об этом. Любая помощь приветствуется, даже направляя меня на другие подходы, чем использование EF таким образом или с использованием EF вообще.

ответ

0

У меня такая же ситуация, но я нашел для нее простую обходную проблему. Все, что вам нужно, это просто создать отдельные проекты для каждой системы баз данных с включенной миграцией. В вашем случае два контекста базы данных должны наследовать один базовый контекст, где сохраняются все разработчики моделей и DbSets.

Пример модели:

// MyModel.Base.csproj 
public class Person { /*..*/ } 

public class BaseDbContext : DbContext 
{ 
    public DbSet<Person> People { get; set; } 

    /*...*/ 
} 

// MyModel.Sql.csproj 

public class SqlDbContext : BaseDbContext {} 

// MyModel.MySql.csproj 

public class MySqlDbContext : BaseDbContext {} 

Возможно наличие двух параметров миграции перелетных это не настолько удивительным идея, но вы можете использовать некоторые сценарии базы данных по конкретным в своих миграциях.

Смежные вопросы