MySQLでEntity Framework
先ほどのPostgreSQLでEntity Frameworkに引き続き、今度はMySQLで試してみたいと思います。
今回の検証は以下の環境にて行いました。
- MySQL 5.1 Windows版
- Visual Studio 2010
- .NET Framework 4.0
上記のものが正常に動作しているという前提で以下に纏めます。
MySQL Connector/NETのダウンロードとインストール
今回はMySQL Connector NET 6.1.4を使用します。
以下からダウンロードします。
http://dev.mysql.com/downloads/connector/net/
リンク先は6.2.3になっていますが、「Looking for previous GA versions?」のリンクから他のバージョンもダウンロードすることが出来ます。
(今回はたまたま6.1.4で試しました)
ダウンロードしたファイルを解凍すると、mysql.data.msiがあるのでこれを実行します。
すると、PostgreSQLの場合とは違い、コンポーネントのインストール、GACへの登録、machine.configへの登録まで行ってくれます。
詳細なインストール方法は
http://dev.mysql.com/doc/refman/5.1/ja/connector-net-installation-windows.html
で確認できます。
やっぱりmachine.configへの追記
大体の作業はmsiのインストール時に行ってくれるのですが、.NET Framework 2.0のmachine.configへの登録までしか行ってくれません。
そこでPostgreSQLの時と同じように
- C:\Windows\Microsoft.NET\Framework\v4.0.30319\CONFIG\machine.config
- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CONFIG\machine.config
のDbProviderFactoriesセクションの最後に以下を追記します。
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.1.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
以下PostgreSQLの時と同じような作業が続くのでポイント部分のみを記述します。
EDM ジェネレーター (EdmGen.exe) ツールの使用
適当なフォルダにて以下のコマンドを実行します。
edmgen.exe /provider:MySql.Data.MySqlClient /mode:fullgeneration /c:"Database=XXXXXX;Data Source=localhost;User Id=XXXXXX;Password=XXXXXX" /project:MvcSampleDB
- MvcSampleDB.csdl
- MvcSampleDB.msl
- MvcSampleDB.ObjectLayer.cs
- MvcSampleDB.ssdl
- MvcSampleDB.Views.cs
の5つのファイルが作成さるので、Visual Studioにて作成したプロジェクトに追加して、MvcSampleDB.csdl、MvcSampleDB.msl、MvcSampleDB.ssdlについては、プロパティのビルドアクションを「埋め込まれたリソース」に変更しておいてください。
アプリケーション構成ファイル(App.config等)への追記
アプリケーション構成ファイルのconnectionStringsセクションに以下を追記します。
<add name="MvcSampleDBContext" connectionString="metadata=res://*/MvcSample.Data.MvcSampleDB.csdl|res://*/MvcSample.Data.MvcSampleDB.msl|res://*/MvcSample.Data.MvcSampleDB.ssdl;provider=MySql.Data.MySqlClient;provider connection string="Database=XXXXXX;Data Source=localhost;User Id=XXXXXX;Password=XXXXXX"" providerName="System.Data.EntityClient"/>
nameの値には先ほどedmgenコマンドのオプション/:projectで指定した名称+DBContext(今回の場合はMvcSample+DBContext)を指定してください。
MvcSampleDB.csdl、MvcSampleDB.msl、MvcSampleDB.ssdlについては、実際のプロジェクトでのパスに合わせて修正してください。
さぁ実行してみましょう!
以上で準備は完了です。あとはSQLServerの場合と同じように使用します。
var members = from x in ctx.member where x.age > 10 orderby x.age select x;
こちらもASP.NET MVC 2.0 な環境で試してみましたが、いつもどおり利用することができました。
PostgreSQLの場合と比べるとデータベースの接続文字列の部分が違うくらいで、ほぼ同じような作業内容になります。
今回最初にPostgreSQLでの検証に手こずったのでMySQLではとても簡単に検証することができました。
でも、これだけやってる割には実際には全然使ってないんですよね。。。