web-dev-qa-db-fra.com

Fournisseur Entity Framework ADO.NET Sql.Data.Client introuvable

J'ai un problème similaire à celui présenté dans la question Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec le nom invariant 'System.Data.SqlClient' , le message d'erreur suivant s'affiche:

"Le fournisseur ADO.NET avec le nom invariant 'System.Data.SqlClient' n'est pas enregistré dans le fichier de configuration de la machine ou de l'application ou n'a pas pu être chargé. Voir l'exception interne pour plus de détails."

Comme le suggèrent les réponses à la question, j'ai réinstallé Entity Framework (EF6) via la console du gestionnaire de packages, mais l'erreur persiste. J'ai également vérifié que EntityFramework.SqlServer.dll est référencé dans mon projet . Voici la chaîne de connexion telle qu'elle est stockée dans App.config:

<add name="DesignModel"    ConnectionString="metadata=res://*/DesignModel.csdl|res://*/DesignModel.ssdl|res://*/DesignModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=C071E;initial catalog=CTD2;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />     

J'ai un autre projet où j'ai utilisé EntityFramework pour créer exactement les mêmes entités et le même contexte, et cela fonctionne bien, ce qui rend tout cela encore plus déroutant.

L'erreur est affichée lorsque vous essayez d'exécuter ces lignes:

DesignModel designContext = new DesignModel();
designContext.MoPerfIDs.Load();

où DesignModel est le nom de la classe qui hérite de DbContext.

Voici l'intégralité de l'App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
       <section name="ppe.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
    <!-- 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="DesignModel" connectionString="metadata=res://*/DesignModel.csdl|res://*/DesignModel.ssdl|res://*/Design    Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MONNMC071E;initial catalog=CTD2;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="System.Data.SqlClient" />
        </parameters>
    </defaultConnectionFactory>
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
</entityFramework>
</configuration>

Toute aide serait appréciée. Merci d'avance.

13
MigLuev

Vous devez inscrire le fournisseur Entity Framework pour le type de connexion SQL System.Data.SqlClient ..... vous devriez avoir dans app.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.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
2
Kirill Bestemyanov

Installez simplement "MySql.Data.Entity" à partir de nuget! Il installera automatiquement le pilote mysql ado et le pilote d'entité!

1
Linojan

Je ne suis toujours pas sûr de la cause du problème, mais j'ai fini par créer une nouvelle solution et tout copier de mon projet. Maintenant fonctionne bien. Vraiment bizarre, en effet.

1
MigLuev

Wow ... c'est assez spécial ... En tout cas. Vous devez inscrire le fournisseur Entity Framework pour le type de connexion System.Data.SqlClient SQL.

Vous voulez ajouter ce qui suit à votre app.config/web.config

<configuration>
  <configSections>
    <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">
      <parameters>
        <parameter value="System.Data.SqlClient" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>
0
Aron

J'ai eu cette erreur mais pour moi c'était quelque chose de complètement différent.

Je devais éditer:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

Et:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

La recherche de DbProviderFactories les deux config ressemblait à ceci:

<system.data>
    <DbProviderFactories>
        <add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
    </DbProviderFactories>
    <DbProviderFactories />
</system.data>

Quand j'ai enlevé le <DbProviderFactories /> final, tout a recommencé à fonctionner.

J'ai pu résoudre le problème en regardant uniquement Unable to find the requested .Net Framework Data Provider et en trouvant la réponse suivante:

https://stackoverflow.com/a/9929534/3850405

0
Ogglas

Le problème dans mon cas était que pour attraper une autre exception, j'avais activé les exceptions CLR. Et j'ai oublié de le désactiver.

Je l'ai désactivé dans mon paramètre d'exception. et il a négligé cette exception et a ensuite couru et créé automatiquement une base de données (dans mon cas).

0
Blue Clouds

Essayez d'ajouter 

var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

dans le ctor de votre designContext.

0
ND72