前回のソースコードをそのまま流用するのでこちらからダウンロードして欲しい。
・セットアップ
下記からそれぞれ自分の環境のものをダウンロードして欲しい。
MySQL Database
Download MySQL Community Server
MySQLのGUIツール
Download MySQL Workbench
MySQLのデータプロバイダー
Download Connector/Net
・MySQLのセットアップ
MySQLをはじめてインストールしたのだが「How to install MySQL on Windows」を参考に下記のようにセットアップした。
- Typical Setup
- スキップSign-Up
- "Configure the MySQL Server now"をチェックする
- "Detailed Configuration"
- "Developer Machine"
- "Multifunctional Database"
- "InnoDB Tablespace Settings" 初期状態のままにする
- "Decision Support (DSS)/OLAP"
- "Enable TCP/IP Networking"をチェックする。またポート番号3306のままにする。"Enable Strict Mode"をチェックする
- "Standard Character Set"
- "Install As Windows Service"をチェックする。また"Launch the MySQL Server automatically"をチェックする
- ルートパスワードを入力する。忘れないように!理由が無い限り"Enable root access from remote machines"はチェックしないほうが良いよ
- "execute"をクリックしてインストール終了まで待機する
・接続文字列
ついでWeb.configの接続文字列を下記のように変更する。
<add name="Sengoku" connectionString="Server=localhost;Database=Sengoku;Uid=username;Pwd=yourpassword;" providerName="MySql.Data.MySqlClient" />
providerNameがMySqlClientになっているのに注目して欲しい。前述のConnector/Netがインストールされているとmachine.config(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config)のDbProviderFactoriesセクションにMySql.Data.MySqlClientが登録されているので特に他の記述は必要ない。
・実行 with Code First
WindowsサービスでMySQLが動作しているのを確認し実行してみよう。これがSQL ServerならばEF Code FirstがDatabaseを作成してくれて正常動作するはずだ。しかし案に相違して「データベースSengokuが見つからない云々」という例外が発生する。
正直、Connector/NetがサポートしていないのかEF Code FirstがCTP5のためサポートされていないのかどちらなのかよく分からない。
・Sengoku Database作成
仕方が無いのでMySQL Administratorにログインし、Sengoku Databaseを作成した。
※ログイン時にUsernameとPasswordが尋ねられる。セットアップ時にPasswordの設定はするけれどUsernameの設定は無かったので面食らうと思うがここではrootと入力すれば良い。
また下記クエリをMySQL Query Browserで実行してTableをSengoku Database上に作成した。
DROP TABLE IF EXISTS `sengoku`.`bushous`; CREATE TABLE `sengoku`.`bushous` ( `bushouid` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` nvarchar(10) NOT NULL, `address` nvarchar(10) NOT NULL, PRIMARY KEY (`bushouid`) ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS `sengoku`.`comments`; CREATE TABLE `sengoku`.`comments` ( `commentid` int(10) unsigned NOT NULL AUTO_INCREMENT, `commentedbushouid` int(10) unsigned NOT NULL, `commentbushouid` int(10) unsigned NOT NULL, `text` nvarchar(30) NOT NULL, PRIMARY KEY (`commentid`), FOREIGN KEY (commentedbushouid) REFERENCES bushous(bushouid), FOREIGN KEY (commentbushouid) REFERENCES bushous(bushouid) ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
これで再度MySQL AdministratorでSengoku Databaseを確認するとTableが2つできているのが確認できると思う。
・実行
この状態で実行すると下図のように正常動作する。武将登録やコメント追加も行える。
・まとめ
MySQLの場合はDatabaseを事前に用意しておかないといけない、という違いはあるもののおおむねSQL Serverと同じ挙動だった。EF Code Firstが正式リリースされたときにここらへんの修正が入るのか、それともConnector/Netのほうの修正が必要なのかは不明だが、現状さしたる不都合は無さそうだ。
0 件のコメント:
コメントを投稿