Misma aplicación, diferentes bases de datos: Entity Framework 6.X + MySQL + SQL Server

Ayer realicé la migración (EF 5.0 => EF 6.0) de la aplicación web que usa el marco de la entidad para llegar a las bases de datos MySql y SQL Server (en particularDbContext a bases de datos particulares, NO a ningunaDbContext a cualquier tipo de base de datos).

Las cosas en tiempo de compilación se hicieron sin ningún problema, el tiempo de ejecución me enfrentó con una excepción:

La instancia predeterminada de DbConfiguration fue utilizada por Entity Framework antes de que se descubriera el tipo 'MySqlEFConfiguration'.

los[DbConfigurationType(typeof(MySqlEFConfiguration))] el atributo en el contexto parece haberse ignorado en tiempo de ejecución porque el contexto está en un ensamblado externo (?) y elDbConfiguration utilizado en su lugar es global para el dominio de la aplicación, no específico para el contexto (?) ".

Intenté diferentes enfoques para solucionarlo, luego lo busqué en Google y, sorpresa, no encontré una solución que funcione.

Parece que la situación se describe bien aquíhttp://forums.mysql.com/read.php?174,614148,614148 Todavía no ha cambiado, o me perdí algunas cosas obvias.

Cualquier comentario será apreciado.

¡Gracias de antemano!

DESCRIPCIÓN DETALLADA:

Entrada (simplificada): - Aplicación web ASP.NET

Capa de acceso a datos implementada sobre Entity Framework 6.1.1

Proveedores de Entity Framework:

System.Data.SqlClient 6.1.1

MySql.Data.MySqlClient 6.9.4

MY_SqlContext, primer concepto de modelo, dirigido a la base de datos MY SQL Server

Ms_SqlContext, primer concepto de base de datos, dirigido a la base de datos MS SQL Server

Según la documentación genérica de Entity Framework 6 y la documentación de MySql Connector / Net (http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html), MY_SqlContext requiere que se aplique MySqlEFConfiguration.

Según ambas documentaciones, mencionadas anteriormente, hay tres opciones para hacerlo. Los tres fueron juzgados y fracasaron.

Opción 1: Agregar el DbConfigurationTypeAttribute[DbConfigurationType(typeof(MySqlEFConfiguration))] a la clase MY_SqlContext

Segmentos apropiados de 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 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>

Después de que la aplicación comienza y las solicitudes web comienzan a procesarse:

Ms_SqlContext funciona bien, pero al intentar crear una instancia de MY_SqlContext, obtengo la excepción:

La instancia predeterminada de DbConfiguration fue utilizada por Entity Framework antes de que se descubriera el tipo 'MySqlEFConfiguration'. Se debe establecer una instancia de 'MySqlEFConfiguration' al inicio de la aplicación antes de usar cualquier característica de Entity Framework o se debe registrar en el archivo de configuración de la aplicación. Consulte ... LinkId = 260883 para obtener más información ".

opcion 2: Llamar a DbConfiguration.SetConfiguration (nuevo MySqlEFConfiguration ()) al inicio de la aplicación

Segmentos apropiados de Web.config (igual que la Opción 1, en realidad):

<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, agregado a Global.asax.cs: Private void Application_Start (remitente de objeto, EventArgs e) {DbConfiguration.SetConfiguration (nuevo MySqlEFConfiguration ()); ...

Después de que la aplicación comienza y las solicitudes web comienzan a procesarse al intentar crear una instancia de Ms_SqlContext, obtengo la excepción:

Se configuró una instancia de 'MySqlEFConfiguration' pero este tipo no se descubrió en el mismo ensamblado que el contexto 'Ms_SqlContext'. Coloque el tipo DbConfiguration en el mismo ensamblado que el tipo DbContext, use DbConfigurationTypeAttribute en el tipo DbContext para especificar el tipo DbConfiguration, o configure el tipo DbConfiguration en el archivo de configuración. Consulte ...? LinkId = 260883 para obtener más información.

Opción 3: Establezca el tipo DbConfiguration en el archivo de configuración

Segmentos Web.config apropiados

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

Después de que la aplicación se inicia y las solicitudes web comienzan a procesarse: ... Se crea la instancia Ms_SqlContext, pero durante la primera ejecución de la consulta, obtengo la excepción:

EntityException: {"El proveedor subyacente falló en Abrir"}

InnerException: {"No se puede conectar a ninguno de los hosts MySQL especificados"}

Entonces, Ms_SqlContext obtiene la configuración de MySql que obviamente es incorrecta.

Respuestas a la pregunta(5)

Su respuesta a la pregunta