ごった煮

色々な事を書いてます

ASP.NET MVCでMySQLをproviderに設定する

ASP.NET MVCでは, プロバイダーという機能があります. この機能を使用すれば, DBを使用したログインの設定などを実装したWebアプリを簡単に実装できます.
この機能は, デフォルトの設定では, Microsoft SQL Serverが設定されています. そこで今回は, MySQL及びMySQL互換のDBを設定する方法を説明します.

さっそくやってみる

プロバイダの設定 [html] <system.web> <membership defaultProvider="MySQLMembershipProvider"> <providers> <remove name="MySQLMembershipProvider" /> <add name="MySQLMembershipProvider" autogenerateschema="true" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName=" /" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> </providers> </membership> <system.web> [/html]

接続用の文字列 [html] <connectionStrings> <remove name="LocalMySqlServer" /> <add providerName="MySql.Data.MySqlClient" name="LocalMySqlServer" connectionString="Datasource=localhost;Database=designproject;Uid=root;"/> </connectionStrings> [/html]

これら, Web.configの設定になります.

解説しているサイトによっては, removeで名前の書き換えを行っていない場合でも動作する風に書いてある場合がありますが, 私の環境では, removeで名前を上書きしないと上手く動作しませんでした.

removeを行わない場合は, Windowsシステム内のデフォルトのmachine.config(c:/Windows/Microsoft.NET/Framework64/V4.0.30319/Config/machine.config)の設定が優先されているようです.
そのため, removeを使用してデフォルトの設定を上書きするか, このmachine.config自体を書き換える必要があるようです.

この設定は, MembershipProviderの設定になります. プロバイダーは, ほかにroleProvider, profileProviderというプロバイダーがあり, これらの設定も切り替えないとMySQLにプロバイダーのDBが切り替わりません.

[html] <profile defaultProvider="MySQLProfileProvider" enabled="true"> <providers> <remove name="MySQLProfileProvider" /> <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName=" /" /> </providers> </profile> <roleManager defaultProvider="MySQLRoleProvider" enabled="true"> <providers> <remove name="MySQLRoleProvider" /> <add name="MySQLRoleProvider" autogenerateschema="true" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName=" /" /> </providers> </roleManager> [/html]

この設定で重要な点は, autogenerateschemaの設定です.
この設定は, テーブルが存在しない場合に自動でテーブルを生成する設定ですが, この設定をtrueにしておかないと私の環境では, エラーになりました.

Microsoft SQL Serverが使えない環境にホスティングしたい場合などに, この設定が必須となってくるので, 参考にしてみてください.