Одно и то же приложение, разные базы данных: Entity Framework 6.X + MySQL + SQL Server

Вчера я выполнил миграцию (EF 5.0 => EF 6.0) веб-приложения, которое использует инфраструктуру сущностей для доступа к базам данных MySql и SQL Server (в частности,DbContext к конкретным базам данных, а неDbContext в любой тип базы данных).

Во время компиляции все было сделано без проблем, во время выполнения я столкнулся с исключением:

Экземпляр DbConfiguration по умолчанию использовался Entity Framework до обнаружения типа «MySqlEFConfiguration».

[DbConfigurationType(typeof(MySqlEFConfiguration))] атрибут в контексте, кажется, был проигнорирован во время выполнения, потому что контекст находится во внешней сборке (?) иDbConfiguration вместо этого используется глобально для домена приложения, а не для контекста (?). "

Я пробовал разные подходы, чтобы исправить это, затем погуглил и - удивительно - не нашел рабочего решения.

Похоже, описанная здесь ситуация сложилась хорошоhttp://forums.mysql.com/read.php?174,614148,614148 все еще не изменилось, или я пропустил некоторые очевидные вещи.

Любые отзывы будут оценены.

Заранее спасибо!

ПОДРОБНОЕ ОПИСАНИЕ:

Ввод (упрощенный): - веб-приложение ASP.NET

Уровень доступа к данным, реализованный в Entity Framework 6.1.1

Поставщики Entity Framework:

System.Data.SqlClient 6.1.1

MySql.Data.MySqlClient 6.9.4

MY_SqlContext, первая концепция модели, ориентированная на базу данных MY SQL Server

Ms_SqlContext, первая концепция базы данных, ориентированная на базу данных MS SQL Server

В соответствии с общей документацией Entity Framework 6 и MySql Connector / Net документация (http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html), MY_SqlContext требует применения MySqlEFConfiguration.

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

Опция 1: Добавление атрибута DbConfigurationTypeAttribute[DbConfigurationType(typeof(MySqlEFConfiguration))] в класс MY_SqlContext

Подходящие сегменты Web.config:

<connectionStrings>
    <add name="MY_SqlContext"
         connectionString="server=.;User Id=root;password=...;Persist Security Info=True;database=MySqlDb;Use Compression=False;Use Old Syntax=False"
         providerName="MySql.Data.MySqlClient" />
    <add name="Ms_SqlContext"
         connectionString="metadata=res://*/Ms_SqlContext.csdl|res://*/Ms_SqlContext.ssdl|res://*/Ms_SqlContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,  MySql.Data.Entity.EF6" />
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
</entityFramework>

После запуска приложения и начала обработки веб-запросов:

Ms_SqlContext работает нормально, но, пытаясь создать экземпляр MY_SqlContext, я получаю исключение:

Экземпляр DbConfiguration по умолчанию использовался Entity Framework до обнаружения типа «MySqlEFConfiguration». Экземпляр MySqlEFConfiguration должен быть установлен при запуске приложения перед использованием любых функций Entity Framework или должен быть зарегистрирован в файле конфигурации приложения. Смотрите ... LinkId = 260883 для получения дополнительной информации. "

Вариант 2: Вызов DbConfiguration.SetConfiguration (new MySqlEFConfiguration ()) при запуске приложения

Подходящие сегменты Web.config (на самом деле так же, как вариант 1):

<connectionStrings>
    <add name="MY_SqlContext"
         connectionString="server=.;User Id=root;password=...;Persist Security Info=True;database=MySqlDb;Use Compression=False;Use Old Syntax=False"
         providerName="MySql.Data.MySqlClient" />
    <add name="Ms_SqlContext"
         connectionString="metadata=res://*/Ms_SqlContext.csdl|res://*/Ms_SqlContext.ssdl|res://*/Ms_SqlContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,  MySql.Data.Entity.EF6" />
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
</entityFramework>

Код, добавленный в Global.asax.cs: private void Application_Start (отправитель объекта, EventArgs e) {DbConfiguration.SetConfiguration (new MySqlEFConfiguration ()); ...

После запуска приложения и начала обработки веб-запросов при попытке создать экземпляр Ms_SqlContext я получаю исключение:

Был установлен экземпляр MySqlEFConfiguration, но этот тип не был обнаружен в той же сборке, что и контекст «Ms_SqlContext». Либо поместите тип DbConfiguration в ту же сборку, что и тип DbContext, используйте DbConfigurationTypeAttribute для типа DbContext, чтобы указать тип DbConfiguration, либо задайте тип DbConfiguration в файле конфигурации. Смотрите ...? LinkId = 260883 для получения дополнительной информации.

Вариант 3: Установите тип DbConfiguration в файле конфигурации

Соответствующие сегменты Web.config

<connectionStrings>
    <add name="MY_SqlContext"
         connectionString="server=.;User Id=root;password=...;Persist Security Info=True;database=MySqlDb;Use Compression=False;Use Old Syntax=False"
         providerName="MySql.Data.MySqlClient" />
    <add name="Ms_SqlContext"
         connectionString="metadata=res://*/Ms_SqlContext.csdl|res://*/Ms_SqlContext.ssdl|res://*/Ms_SqlContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=MsSqlDb;User ID=appuser;Password=...&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,  MySql.Data.Entity.EF6" />
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
</entityFramework>

После запуска приложения и начала обработки веб-запросов: ... создается экземпляр Ms_SqlContext, но при первом выполнении запроса я получаю исключение:

EntityException: {"Базовый поставщик не удалось открыть."}

InnerException: {"Невозможно подключиться к любому из указанных хостов MySQL."}

Итак, Ms_SqlContext получает конфигурацию MySql, которая явно неверна.

Ответы на вопрос(5)

Ваш ответ на вопрос