web-dev-qa-db-fra.com

Exception d'initialiseur de type Entity Framework

J'ai un projet de structure d'entité qui fonctionne bien sur ma machine, mais tombe quand il est exécuté à partir du réseau. Les modifications récentes apportées au projet incluent l’ajout de la DLL dynamique Linq (System.Linq.Dynamic).

Lorsque je le débogue du réseau, VS rapporte: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception

L'exception interne est la suivante: "Impossible de charger le fichier ou l'assembly 'EntityFramework, Version = 4.4.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089' ou l'une de ses dépendances. La définition du manifeste de l'assembly situé ne correspond pas à la référence de l'assembly. (Exception de HRESULT: 0x80131040) ":" EntityFramework, Version = 4.4.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089 "}

J'ai essayé les astuces habituelles: supprimer le répertoire packages de la racine du projet, désinstaller et réinstaller à partir de la console du gestionnaire de packages, mais en vain.

Mon app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="LGFinance.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 -->
  </configSections>
  <connectionStrings>
    <add name="LGFinanceEntities" connectionString="metadata=res://*/Model.LGFinanceContext.csdl|res://*/Model.LGFinanceContext.ssdl|res://*/Model.LGFinanceContext.msl;provider=System.Data.SqlClient; provider connection string='data source=lightning;initial catalog=DLGDB;Integrated Security=true;Password=******;multipleactiveresultsets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <applicationSettings>
    <LGFinance.Properties.Settings>
      <setting name="Setting" serializeAs="String">
        <value />
      </setting>
    </LGFinance.Properties.Settings>
  </applicationSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Est-ce que quelqu'un peut signaler ce que j'ai mal fait?

8
mcalex

Entity Framework 5.0 est répertorié dans votre fichier App.config. Certains projets de votre code sont toujours liés à EF 4.4 et devraient le trouver dans le fichier App.config.

Voici ce qui est probablement arrivé: Vous avez installé EF 5.0 sur un projet construit avec .NET 4.0, ce qui rend la version de EF 4.4 au lieu de 5.0 (étant donné que la version 5.0 ne concerne que .NET 4.5). Si vous avez essayé de passer le projet à .NET 4.5 plus tard, vous aurez toujours EF 4.4 sur ce projet. Cela vous obligerait à réinstaller EF sur ce projet pour avoir la référence correcte à EF 5.0.

Donnez un coup de feu et laissez-moi savoir si cela fonctionne.

20
IronMan84

La version correcte de EF doit d'abord être installée sur tous les projets, puis vérifiez les éléments suivants dans le fichier App.config.

  1. Assurez-vous que connectionStrings element est après l’élément configSections .
  2. Assurez-vous que startup element se trouve après le connectionStrings element.

<?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <configSections>
         <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   </configSections>
   <connectionStrings>
         <add name="SchedulingContext" connectionString="Data Source=XXX\SQL2008R2DEV;Initial Catalog=YYY;Persist Security Info=True;User ID=sa;Password=XXX"   providerName="System.Data.SqlClient"/>
   </connectionStrings>
   <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>       
 </configuration>
10
Diganta Kumar

J'ai tout essayé, après avoir simplement retiré les fournisseurs suivants, cela a fonctionné pour moi

<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
4
Navan

Je pourrais résoudre ce problème en installant: Outils Entity Framework 6 pour Visual Studio 2012 et 2013 - http://www.Microsoft.com/en-gb/download/confirmation.aspx?id=40762

Cordialement, AM

0
Mata