2011-09-08 17 views
22

Utilizo .NET MySQL Connector con Entity Framework 4, y todo funcionó muy bien, pero quería empaquetar los archivos DLL del cliente MySQL con mi aplicación cuando se implementa en los servidores, por lo que no tenemos preocuparse por la instalación de MySQL en cada servidor, cada aplicación tendrá la copia correcta que necesita..NET MySQL Connector Conflicting DbProviderFactories

Para hacer esto posible, me aseguré de las referencias MySQL tenían "Copia local" establecida por lo que se copian en las carpetas bin y ha añadido lo siguiente a mi app.config:

<system.data> 
    <DbProviderFactories> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 

Esto funciona y Puedo implementar la aplicación sin instalar mysql en el servidor remoto, pero ahora tengo un problema en mi máquina de desarrollo local (donde I do tengo el conector MySQL instalado), y recibo este error cuando EF intenta conectar: ​​

La columna 'InvariantName' está limitada a ser única. Valor 'MySql.Data.MySqlClient' ya está presente.

Si comento el XML que agregué arriba en el app.config, el error desaparece. Esto es probable porque el mismo controlador está instalado en el sistema y está en machine.config.

¿Cuál es la solución? Preferiría no tener que comentar y descomentar manualmente la línea en función del sistema para el que creo la aplicación.

Respuesta

43

intente agregar < eliminar invariant = "MySql.Data.MySqlClient" /> en su webconfig. En su computadora, ha instalado el Connector para MySql y su machine.config se ha modificado agregando un elemento en los DbProviderFactories. Entonces, si coloca otro proveedor de datos MySql en su web.config, es como si estuviera intentando registrar lo mismo dos veces.

<system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 
+1

Funciona perfectamente tanto en el servidor como en la máquina local. ¡Gracias! – Kekoa

+1

Estaba teniendo este problema también, y esto funcionó como un encanto. Pensé que sería algo como esto, pero no pensé en probar la palabra clave invariante. –

+1

¡Esto también funcionó para mí! Gracias una tonelada :) – DigitalRayne

0

también se puede considerar para copiar todos los archivos DLL en MySQL del C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.0 en la carpeta bin de su proyecto. De esta forma, EF6 puede llegar a todas las subclases requeridas del conector MySQL (MySql.Data).

Cuestiones relacionadas