Mesmo aplicativo, bancos de dados diferentes: estrutura de entidade 6.X + MySQL + SQL Server

Ontem fiz a migração (EF 5.0 => EF 6.0) do aplicativo Web que usa a estrutura da entidade para acessar os bancos de dados MySql e SQL Server (em particularDbContext bancos de dados específicos, NÃODbContext para qualquer tipo de banco de dados).

Em tempo de compilação, as coisas foram feitas sem problemas, o tempo de execução me encarou com exceção:

A instância DbConfiguration padrão foi usada pelo Entity Framework antes da descoberta do tipo 'MySqlEFConfiguration'.

o[DbConfigurationType(typeof(MySqlEFConfiguration))] O atributo no contexto parece ter sido ignorado no tempo de execução porque o contexto está em um assembly externo (?) e o atributoDbConfiguration usado é global para o domínio do aplicativo, não específico para o contexto (?). "

Tentei abordagens diferentes para corrigi-lo, depois pesquisei no Google e - surpresa - não encontrei uma solução que funcionasse.

Parece que a situação descrita bem formada aquihttp://forums.mysql.com/read.php?174,614148,614148 ainda não mudou, ou eu perdi algumas coisas óbvias.

Todos os comentários serão apreciados.

Agradeço antecipadamente!

DESCRIÇÃO DETALHADA:

Entrada (simplificada): - Aplicativo da Web ASP.NET

Camada de acesso a dados implementada no Entity Framework 6.1.1

Provedores do Entity Framework:

System.Data.SqlClient 6.1.1

MySql.Data.MySqlClient 6.9.4

MY_SqlContext, primeiro conceito de modelo, direcionado ao banco de dados MY SQL Server

Ms_SqlContext, primeiro conceito de banco de dados, direcionado ao banco de dados MS SQL Server

De acordo com a documentação genérica da documentação do Entity Framework 6 e do MySql Connector / Net (http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html), MY_SqlContext requer que MySqlEFConfiguration seja aplicado.

De acordo com as duas documentações, mencionadas acima, há três opções para fazer isso. Todos os três foram tentados e falharam.

Opção 1: Adicionando o DbConfigurationTypeAttribute[DbConfigurationType(typeof(MySqlEFConfiguration))] para a classe MY_SqlContext

Segmentos Web.config apropriados:

<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 t,ype="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>

Depois que o aplicativo é iniciado e as solicitações da Web começam o processamento:

Ms_SqlContext funciona bem, mas, ao tentar criar uma instância MY_SqlContext, recebo a exceção:

A instância DbConfiguration padrão foi usada pelo Entity Framework antes da descoberta do tipo 'MySqlEFConfiguration'. Uma instância de 'MySqlEFConfiguration' deve ser definida no início do aplicativo antes de usar qualquer recurso do Entity Framework ou deve ser registrada no arquivo de configuração do aplicativo. Veja ... LinkId = 260883 para mais informações. "

opção 2: Chamando DbConfiguration.SetConfiguration (novo MySqlEFConfiguration ()) na inicialização do aplicativo

Segmentos Web.config apropriados (mesmo que a Opção 1, na verdade):

<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>

Código adicionado ao Global.asax.cs: private void Application_Start (remetente do objeto, EventArgs e) {DbConfiguration.SetConfiguration (new MySqlEFConfiguration ()); ...

Depois que o aplicativo é iniciado e as solicitações da Web começam o processamento tentando criar uma instância Ms_SqlContext, recebo a exceção:

Uma instância de 'MySqlEFConfiguration' foi definida, mas esse tipo não foi descoberto no mesmo assembly que o contexto 'Ms_SqlContext'. Coloque o tipo DbConfiguration no mesmo assembly que o tipo DbContext, use DbConfigurationTypeAttribute no tipo DbContext para especificar o tipo DbConfiguration ou defina o tipo DbConfiguration no arquivo de configuração. Consulte ...? LinkId = 260883 para obter mais informações.

Opção 3: Defina o tipo DbConfiguration no arquivo de configuração

Segmentos Web.config adequados

<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>

Depois que o aplicativo é iniciado e as solicitações da Web começam a processar: ... A instância Ms_SqlContext é criada, mas durante a primeira execução da consulta, recebo a exceção:

EntityException: {"O provedor subjacente falhou ao abrir."}

InnerException: {"Não foi possível conectar-se a nenhum dos hosts MySQL especificados."}

Então, Ms_SqlContext obtém a configuração do MySql que está obviamente errada.

questionAnswers(5)

yourAnswerToTheQuestion