web-dev-qa-db-fra.com

Entity Framework avec MySQL

Je reçois l'erreur suivante

"Le type de fournisseur Entity Framework 'MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity' enregistré dans le fichier de configuration de l'application pour le fournisseur ADO.NET avec le nom invariant 'MySql.Data.MySqlClient' n'a pas pu être chargé. Assurez-vous de ne pas le charger. Assurez-vous. que le nom qualifié d'assembly est utilisé et que l'assembly est disponible pour l'application en cours d'exécution. Voir http://go.Microsoft.com/fwlink/?LinkId=260882 pour plus d'informations. "

Cependant, j'ai MySql.Data.dll et MySql.Data.Entity.dll et aussi MySql.Data.Entity.EF6.dll référencés dans mon projet (provient de MySQL Connector Net 6.8.3)

Voici mon App.conf

<?xml version="1.0" encoding="utf-8"?>
 <configuration>
  <configSections>
   <!-- For more information on Entity Framework configuration, visit  http://go.Microsoft.com/fwlink/?LinkID=237468 -->
   <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 </configSections>
 <connectionStrings>
  <add name="inspectm_inspectContext" connectionString="server=--user id=--;password=--;database=--;persistsecurityinfo=True" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
<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.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </DbProviderFactories>
</system.data>
<entityFramework>
<defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
<providers>
  <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
</providers>
</entityFramework>
</configuration>
10
Donald Jansen
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="inspectm_inspectContext" connectionString="server=--;user id=--;password=--;database=--;persistsecurityinfo=True" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
     <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
     </providers>
  </entityFramework>
</configuration>

Mon complète App.conf cela a fonctionné pour moi

J'ai d'abord enlevé

<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.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>

Puis j'ai changé

<defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />

Et ajouté le fournisseur

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
7
Donald Jansen

pour toute personne confrontée au même problème, voici la ligne qui provoque l'exception est-ce 

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />

Il suffit d’ajouter .EF6 à MySql.Data.Entity pour que le fournisseur ressemble à ceci

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />

En tant que tel, votre choix de supprimer le code n'a pas aidé à résoudre le problème. J'espère que ça aidera quelqu'un.

3
Dev

Recherchez une exception interne. 

Je reçois 

"{" Règles de sécurité d'héritage violées par le type: 'MySql.Data.Entity.MySqlEFConfiguration'. Les types dérivés doivent soit correspondre à l'accessibilité de sécurité du type de base ou être inférieur accessible. ":" MySql.Data.Entity.MySqlEFConfiguration "}"

Cela m'indique: Les règles de sécurité d'héritage sont violées par le type: 'MySql.Data.Entity.MySqlEFConfiguration'

Je n'aime pas vraiment déclasser. Mais jusqu'à présent, je n'ai pas trouvé de meilleure réponse.

1
Dennis Robinson

Vous pouvez également faire ce qui suit

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}
{
1
Kay Albertus