web-dev-qa-db-fra.com

Règles de sécurité d'héritage violées par le type: 'MySql.Data.Entity.MySqlEFConfiguration'

J'ai créé une application Web asp.net qui devrait se connecter à une base de données mysql.

J'utilise entity framework 6 avec un modèle de données d'entité ado.net. J'ai également suivi le tutoriel suivant: https://dev.mysql.com/doc/connectors/en/connector-net-entityframework60.html#connector-net-ef6-config

Cependant, en appelant: DbConfiguration.SetConfiguration(new MySqlEFConfiguration());

provoque le blocage de mon application. Cela n'a probablement rien à voir avec cette méthode spécifique, car la création d'un DBContext bloque également l'application.

Des idées ce qui cause cette erreur?

  • .NET Framework: 4.6.1
  • MySql.Data.Entity.EF6: 6.10.4

Web.config:

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

<connectionStrings><add name="DatabaseEntities" connectionString="metadata=res://*/Database.Model.csdl|res://*/Database.Model.ssdl|res://*/Database.Model.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;&quot;" providerName="System.Data.EntityClient" /></connectionStrings><system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add description=".Net Framework Data Provider for MySQL" invariant="MySql.Data.MySqlClient" name="MySQL Data Provider" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

Erreur complète:

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.

Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez revoir la trace de la pile pour plus d'informations sur l'erreur et son origine dans le fichier code. 

Détails des exceptions: System.TypeLoadException: les règles de sécurité d'héritage ont été 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.

21
Jamie

J'ai rétrogradé MySql.Data.Entity.EF6 vers une version antérieure et cela a résolu mon problème.

38
Jamie

Le déclassement de MySql.Data.Entity de la version 6.10.x à 6.9.10 peut résoudre le problème. Il a résolu le mien

8
Hung Vu

J'ai eu quelques problèmes d'instabilité horribles avec 6.9.10. Il semble également que cela a été retiré de NuGet. Sous la charge lourde je recevais "des erreurs de base de données non trouvées" sporadiquement.

Essayez 6.9.11 à la place. Cela semble stable pour moi. Et son disponible sur NuGet.

2
Dennis Robinson

Je l'ai fait et cela a fonctionné pour moi

  1. Installez les dernières versions de entityframwork et de mysql.data et mysql.data.entity à partir du gestionnaire de paquets Nuget.

  2. Créez votre modèle databasefirst autogenerate

  3. Désactivez mysql.data.entity et installez mysql.data.entity v 6.9.10 Apprenez simplement comment installer ou désinstaller
1
IAmIranian

J'ai eu le même problème après la mise à niveau des paquets MySql NuGet de 6.9.8 à 6.10.6 dans VS 2017 Community. J'ai suivi les instructions de la réponse acceptée et rétrogradé à 6.9.x l'a corrigé. Après une enquête plus approfondie, Oracle a corrigé le bogue dans la prochaine version 6.10.7 ( https://bugs.mysql.com/bug.php?id=89134 ).

En bref, jusqu’à la sortie de 6.10.7, rétrogradez à 6.9.x! Je suis revenu en utilisant le gestionnaire de paquets Nuget et je n'ai rien changé d'autre pour que cela fonctionne. 

1
Matt H

La mise à niveau du paquet Nuget vers la version 6.10.8 a résolu ce problème pour moi.

0
flobadob

La même chose pour moi avec VS2017. J'ai utilisé MySql.Data.Entity v6.9.10 .
Avant cela, j’avais également installé le connecteur mysql pour .Net version 6.9.10

  • Après cela, j'ai installé le paquet NuGet pour MySql.Data.Entity
  • La dernière étape consistait à modifier le web.config en conséquence:
    • chaîne de connexion, 
    • cadre d'entité et 
    • system.data (sachez que vous devez également mettre à jour la version dans les deux derniers si vous les prenez depuis le site web mysql)
  • Ahh ne pas oublier j'ai ajouté aussi 

    DbConfiguration.SetConfiguration(new MySqlEFConfiguration()) 
    

    dans mon application, démarrez. 

et cela a finalement fonctionné: D

0
C.Sv