web-dev-qa-db-ja.com

エンティティフレームワーク:認識されない要素の「プロバイダー」例外

Entity Framework 5.0.0を.NET 4.0で使用すると、実行時にnrecognized element 'providers'例外が発生します。実際に.NET 4.0では、NuGetでインストールパッケージを実行したときに読み込まれるEntity Frameworkのバージョン4.4.0です。エクスプローラーからファイルのプロパティを確認すると、次のように表示されます。

enter image description here

これが私の設定ファイルです

 <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <connectionStrings>
    <add name="xxx" connectionString="metadata=res://*/StreetMusicModel.csdl|res://*/StreetMusicModel.ssdl|res://*/StreetMusicModel.msl;         provider=MySql.Data.MySqlClient;provider connection string='         server=xxx.net;         user id=xxx;         password=xxx;         database=xxx'" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v12.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
    </providers>
  </entityFramework>

Entity Framework 4.4.0はタグを認識できないと感じています。セクションを削除したり名前を変更したりできますか?セクションを削除すると、別の例外基になるプロバイダーがOpenで失敗しましたが発生します。

24

Nugetを使用してEFをバージョン6からバージョン5.0.0にダウングレードした後、この問題が発生しました。問題は、EF v6を追加するときにプロバイダー構成が追加されるが、ダウングレード後に削除されないことだと思います。したがって、<providers>タグ内のコンテンツとタグ自体を削除するだけで、正常に機能します。

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="v12.0" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>
61
Wery Nguyen

タグは、プロジェクトのビルド後にYourProjectName.dll.configから自動的に削除されるため、YourProjectName.dll.configファイルからではなく、プロジェクトのapp.configファイルから削除する必要があります。

注:答えは上記のコメント自体にあります。ここで答えをまとめました。

0
thatskj