web-dev-qa-db-ja.com

Microsoft Visual Studio 2013のWinFormsでMySql(C#)のEntity Framework 6を​​有効にします

昨日、Entity FrameworkがDatasetまたはDataReaderを使用する以外にデータベースにアクセスする別の方法であることを知っていたので、MVS 2013のMySqlデータベースサーバーでEntity Framework 6を​​動作させようとしました。

.Net FrameWork 4.5.1でWinFormsを開きます。 (したがって、プロジェクトにはApp.configのみがあり、app/web configはありません) mysql-installer-community-5.7.3.0-m13.msi および

entityFrameworkパッケージをインストールする

[ツール]メニュー->ライブラリパッケージマネージャー->ソリューション用のNuGetパッケージの管理...->オンライン->(検索)EntityFramework(このパッケージのバージョンに注意してください。バージョン6.0.2でなければ、[更新]-> EntityFrameworkをクリックします。更新する)

を介してADO.NET Entity Data Modelを追加しようとしたとき

右クリックプロジェクト->追加->新規アイテム-> ADO.NETエンティティデータモデル->データベースから生成->新規接続->データソース:->変更...-> MySQLデータベース->サーバー名を入力サーバーIP、ユーザー名、パスワード->データベース名の選択->接続のテスト-> OK

次に、エンティティ接続文字列が生成されます-> App.Configでエンティティ接続設定を次として保存->次へ>->

Entity Frameworkのどのバージョンを使用しますか? Entity Framework 6.0オプションがありますが、使用できないため

「プロジェクトはEntity Frameworkの最新バージョンを参照しています。ただし、このバージョンと互換性のあるEntity Frameworkデータベースプロバイダーがデータ接続に見つかりませんでした。このウィザードを終了し、互換性のあるプロバイダーをインストールし、このアクションを実行する前にプロジェクトを再構築します」.

これを解決する方法は?

ところで、Nuget PackageにEntity Frameworkバージョン5をインストールする場合、ここにオプションEntity Framework 5.0があり、バージョン6ではなくEntity Framework 5を使用できる可能性があります。

43
V-SHY

まず第一に、mysql-installer -community- 5.7.3.0-m13.msiをインストールするために必要すらありませんです。

  1. 最新の mysql-visualstudio-plugin をインストールします
  2. 最新の mysql-connector-net をインストールします
  3. 新しいC#.Net 4.5 Framework WinForms(4.の場合、 Entity Framework 6は.NET 4.0をサポートしていますか? に基づいて動作します)
  4. 4 Nuget Packagesをインストールします(EntityFrameworkの前にMysql.Data.Entitiesをインストールすると、依存関係を解決してEntityFramework 6.0.2をインストールしますが、必要なのはEntityFramework 6.1.

EntityFramework

Mysql.Data

Mysql.Data.Entities

Mysql.Web

5. App.configtag entityFrameworkがある場合は、コメントして、タグの起動後にApp.configに新しいタグentityFrameworkを挿入してください

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

6. ADO.NET Entity Data Modelを追加します(質問で述べたとおり)

7. エンティティ接続文字列が生成されます(質問に記載されているように)および[App.Configでエンティティ接続設定を保存する]にチェックマークを付けて[次へ]をクリックします

8.データベースオブジェクトと設定を選択します(テーブル、ビュー、またはストアドプロシージャと関数)(のみがあるため、どのバージョンのEntity Frameworkを使用しますか?) one Entity Framework 6.0プロバイダーなので、私の唯一のプロバイダーが有効な場合はskip選択を指示します)

9.終了

おめでとうございます^^

ところで、.dllファイルを追加する必要があるかもしれません

  • MySql.Data.dll
  • MySql.Data.Entity.EF6.dll
  • MySql.Web.dll

このフォルダー内

C:\ Program Files\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5(32ビットWindows)

C:\ Program Files(x86)\ MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5(64ビットWindows)

さらなるEF6機能のプロジェクト参照として。

87
V-SHY

V-Shyの指示に従いましたが、LaRae Whiteと同じ問題を抱えていましたが、ウィザードがシャットダウンしました。 VS2015を実行していて、MySqlインストーラーを使用してVisual Studio v1.2.6およびConnector/NET v6.9.8のMySQLに更新したばかりです。

私が最終的にそれを機能させるためにしたことはこれでした:

  1. この問題を解決するために以前にインストールしたすべてのパッケージ(EntityFramework、Mysql.Data、Mysql.Data.Entities、Mysql.Web)をアンインストールします
  2. C:\ Program Files(x86)\ MySQL\Connector.NET 6.9\Assemblies\v4.5にある次の参照を手動で追加しました:MySql.Data.dll、MySql.Data.Entity.EF6.dll、およびMySql.Web。 dll

私はそれが誰かを助けることを願っています。

11
ih303

修正は次のとおりです。

  1. MySQL Visual Studioプラグインをインストールする
  2. MySQL Connector for .NETをインストールします
  3. プログラムファイル内のMySQLConnectorアセンブリからプロジェクトに参照を追加します。
  4. App.ConfigまたはWeb.Configから古いコードを削除する

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

  5. 以下のコードに置き換えます。

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

  6. プロジェクトをリビルドし、新しいADO .NET Entity Data Modelを追加してみてください

4

私はこの問題を解決する方法を見つけるのに一日中費やしますが、何も助けにはなりません。どうやら私は人々が言及していない1つのことを理解する

Model.edmxプロパティには「DDL Generation Template」全体があり、デフォルトでは「SSDLToSQL10.tt(VS)」に設定されていますが、「SSDLToMySQL.tt(VS)」に設定する必要があります

さらに、エラーが発生していました:

実行中の変換:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
bla bla bla
行93 c:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToMySQL.tt

「MySQL for Visual Studio 1.1.3」の公式バグにつながる理由は、次のビルド1.1で修正される予定です.4これは今のところ利用できません。

ただし、回避策の修正があります。
"MySql.Data.Entity.EF6.dll"を上書きします
C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
NETコネクターからのファイル
C:\ Program Files(x86)\ MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5 \

4
Briksins

私も同じ問題を抱えていて、ここにあるようなさまざまな修正を試みましたが、これもMySQLフォーラムからのもので、EDMXを更新できませんでした。

しばらくして(非常に長い時間)、このことをVS 2013アップデート3、.Netコネクタ6.9.4、Myvc for VS 1.2.3 for MvcApplicationで動作させることができました。

最初に、真新しいマシンで試してみました。すべてがVSのシンプルなインストールで機能し、続いてVS用のコネクタとMysqlが機能しました。次に、古いVS 2012でも試してみましたが、これも機能しました。私はすでに自分のマシンでEF5を使用していくつかのプロジェクトを作成しており、古いEF5ファイルがEF6のファイルに干渉する可能性があると考えていました。

だからここに私がやったことがありますが、これはマシン関連の問題であり、私が必死に試したすべてのことのリストをあなたに与えていることを覚えておく必要があります:

  1. C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssembliesフォルダー内のすべてのMySql。*。dllを削除します

  2. C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Common7\IDE\PublicAssembliesフォルダーのMySql.Data.Entity.dllをConnectorフォルダーのフォルダーで上書きします

  3. NugetコンソールのプロジェクトからEntityFrameworkをアンインストールしてから、EF 6.0.0にダウングレードします。Install-Package EntityFramework -ProjectName YourProject -version 6.0.0

  4. Nugetではなく、ファイルを直接参照することにより、MySql.Data.Entity.EF6への参照を追加します(C:\ Program Files(x86)\ MySQL\MySQL Connector Net 6.9.4\Assemblies\v4.5\MySql.Data.Entity .EF6.dll)

私のapp.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" />
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 --></configSections>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <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>
        <!-- your connection string here -->
    </connectionStrings>
</configuration>

そして、プロジェクトに追加された参照はこれらの3つです

  • EntityFramework
  • EntityFramework.SqlServer
  • MySql.Data.Entity.EF6

一部の手順は役に立たなかったかもしれませんが、ついにEDMXファイルを更新できるようになりました。もちろん、Webプロジェクトをビルドして実行すると、VSはMySql DLLの削除の影響を受けません。それが役に立てば幸い。

2
JJP

MySQLドキュメントに示されているように、DbContextに注釈があることを確認します。

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public partial class MyDbContext : DbContext
{
}

データベースを最初に ASP.NET MVCアプリケーションを使用すると、EDMXファイルを別のマシンのソース管理から外れるまで更新できます。

アノテーションを追加するまで同じエラーに直面し続けたので、これがEntity Framework 6でMySQLを使用しているときにEDMXを更新できない、またはエラーを見つける人を助けることを願っています。

2
Luke

私も同じ問題を抱えていました。私の場合、私は:

  • 再構築モデルの追加ウィザードを開始する前にパッケージを追加した後のプロジェクト。
  • エンティティフレームワークパッケージの最新バージョンをアンインストールし、バージョン6.0.0.0に戻します。
  • [〜#〜] not [〜#〜] Mysql.Data.Entitiesのインストール後にMysql.Data.Entities.EF6をインストール!!
  • 1つのみ MySql.Data.MySqlClientプロバイダーがプロバイダー内にあり、バージョンが含まれているはずであるように構成ファイルを変更します。

    <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
    
2
Hamed

これらの答えはどれも私にとってそれを解決しませんでした。唯一機能したのは、MySql.Data.EntityFramework NuGetパッケージをインストールすることでした。 VSを再起動して再構築すると、ウィザードを完了できました。 (VS2017 15.8.7のWPF)。

1
jweaver

VS2013コミュニティにも同様の問題がありますが、私のものはWinFormではなくASP.NET MVCです。上記のすべてのソリューションを実行した後、私の問題はまだそこにありますが、それら(特にHamed)はそれを修正するためのアイデアをくれました。

したがって、ここまでスクロールすると、アイデアが得られるかもしれません。私は持っています:

  1. MySQL Connector NET 6.8.4をインストールしました(6.9.5は機能していないようです)。
  2. VS 1.2.3のMySQLはそのままにしました(1.2.3が機能していたため、1.1.1をインストールする必要はありません)。
  3. NuGetからMySQL.data Mysql.Data.entitiesをインストールしました。
  4. D:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssembliesからすべてのMySQL.dllを削除しました。
  5. ハメッドが言ったように行われました。
  6. 再構築されたソリューション。
  7. 新しいADO.NETエンティティモデルが正常に追加されました。

この助けを願っています。

1
Vinh V

Ih303のような問題がありました。修正方法:

-ソリューションV-SHYをフォロー

-エラーメッセージなどがない場合、ウィザードは終了します->次の解決策を実行します(私にとってはうまくいきました):

入れる代わりに:

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

次のように変更します。

    <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="mssqllocaldb" />
        </parameters>
      </defaultConnectionFactory>
      <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>

再構築->ウィザードの追加など->動作するはずです。

1
mRozwold

過去2日間何時間も苦労した後、最終的に私が役立ったのは、すべてのコードを古いEF5コードに戻し、ADO .NET Entity Data Modelを削除して、それを再度追加することです- [〜#〜] without [〜#〜]エンティティフレームワーク6.0(これは無効になっています)を選択しますが、5.0を選択します。最新のmysqlコネクタ、Visual Studioプラグイン、および私がインストールしたその他すべてのもの前述のように、Visual StudioはEntity Framework 6.0を自動的に追加しましたADO「選択」を無視するエンティティデータモデル。その後、要求されたプロジェクト(EntityFramework、mysql.data 、mysql.data.entity.EF6 ver 6.9.6)および最終的に動作します。

1
Gil Cohen

次の参照を削除することで、何とか動作するようになりました。

MySql.Data.Entity.EF6
MySql.Data

代わりにNugetをインストールしました

MySql.Data.Entity

それは、上記で削除されたフレームワークへの参照を追加するだけでなく、プロジェクトの構成を変更しました。 nugetをインストールした後、dllファイルがbinディレクトリに追加されるように、プロジェクトも再構築しました。

1
andrei

Oracle接続のADO.NET Entity Data Modelアイテムを追加すると、「プロジェクトはEntity Frameworkの最新バージョンを参照しています...」というエラーメッセージが表示されます

解決手順はこちらです。

  1. Oracle ODTwithODAC122010を32ビットとしてインストールします

  2. VS2017でプロジェクトを作成する

  3. アクティブソリューションプラットフォームをAnyCPUから32ビットに変更

  4. [ツール]-> [Nuget PackageManager]-> [ソリューションのNugetパッケージの管理]を開きます。

  5. ブラウズ領域「ODP」を記述し、次のプログラムをインストールします

オラクル。 ManagedDataAccessおよびOracle.ManagedDataAccess.EntityFramework

6. [ツール]-> [Nuget PackageManager]-> [パッケージマネージャーコンソール]を開きます。

7.このInstall-Package EntityFramework -Version 6.1.1を書いてEnter

8. Visual Studioを再起動してプロセスを終了します

9.アプリケーションを再構築する

  1. 新しいアイテムADO.NETエンティティデータモデルを追加する

11.必要に応じて、Oracleへの新しい接続の追加(データソース= Oracleデータベース(ODP.NET、マネージドドライバー))

12.すべてがOKです。

注EF6.1.3はVS2017およびOracle ODTwithODAC122010で動作しません。しかし、これらすべてのプロセスの後、私はEFをEF6.1.3として変更しました。それは機能していますが、アドバイスはしません。

0
Mehmet Kurt

私にとって、これは32ビットVS 64ビットデータベースドライバーと何か関係があるようです。

少なくともこの時点で、構成をx64に変更することで、このエラーの有無を切り替えることができます。どのCPUを試しても機能せず、x86を試しても機能しません。

32ビットMySQLドライバーを使用するか64ビットMySQLドライバーを使用するかを決定する場所がわかりません。インストーラーは両方をインストールすると主張します。

(1つ以上のNuGetパッケージを追加する必要がありましたMySql.DataMySql.Data.Entity、およびMySql.Data.Entities、およびEntityFramework

モデルをプロジェクトに追加したら、今まで問題なくプロジェクトをx86に戻すことができました。

0
Dave Cousineau