こんにちは、しゅんです!
目次
SQL Serverを使えなかった経緯
社内試運転のためのサブドメインで公開する予定でした。しかし、そのサーバーではSQLServerを動かすにはスペック不足だと判明。サーバー管理者の方から「MySQLでやった方がいいんじゃない?」と軽く言われ、今更どうしよう、、と非常に焦りました。
とはいっても、.NETは公式ドキュメントが充実しているので、探せばあるかな、、くらいの気持ちで考えていましたが、
▼SQLServerとMySQLの推奨スペック一覧表▼
容量 | 6GB以上 | 0.5G以上 |
---|---|---|
CPU | x64 | x86, x64 |
メモリ | 4G以上 | 2G以上 |
ディスク | 6GB以上 | 不要 |
調べたところ、MySQLは低スペックでも動作するようです。SQL Serverは安定性に定評があるようですが、容量が大きいのはデメリットですね。
MySQLに切り替えるイメージ図
ASP.NET Coreのデフォルトのローカル開発環境で接続されているSQLServerのみをMySQLに切り替えます。
サンプルの開発環境
MySQLを使用する方法を説明するにあたり、プロジェクトを作成しつつ、解説をします。
開発環境は以下の通りとします。
- Visual Studio 2022 Community
- .NET 6.0
- localhost(IIS Express)
- MySQL(XAMPP)
では、早速はじめていきましょう。
XAMPPのインストール
XAMPPはWebアプリの開発に必要なWebサーバー、 データベースなどを一括でダウンロードし、 インストールできるソフトです。 |
XAMPPを使うことでGUIメインでMySQLを操作する「phpMyAdmin」を利用できます。
XAMPPとは
X(クロス) A(Apache) M(MySQL/MariaDB) P(PHP) P(Perl/Python)が由来です。
XAMPP(ザンプ)とは、アプリケーションの開発環境をローカルで簡単に構築できたり、開発に欠かせないソフトウェアや便利なツールを無料で一括インストールできたりするパッケージのことです。
XAMPPをインストール
XAMPPはバージョンアップ頻度が高いそうなのでインストール手順の解説はスキップします。「検索」して、最新のインストール方法解説記事をご参照ください。
XAMPPからMySQLを起動
XAMPP Controll Panelを起動し、MySQLのActionsを「Start」させます。デフォルトのポート番号80番と3306番が使用されているかを確認してください。
以上でXAMPPの設定は完了です。
続いて、.NET Coreアプリを作成し、MySQLに接続出来る様に設定してあげましょう。
.NET CoreプロジェクトをMySQLに接続する方法
まず、.NET Coreでデータベースを持つプロジェクトを作成していきます。今回は.NET Coreが持つデフォルトの認証機能(Microsoft.AspNetCore.Identity)が持つデータベースをMySQLに構築する例をご紹介します。
.NET Coreプロジェクトの作成
Visual Studioを起動し、ASP.NET Core Webアプリ (MVC)を選択します。
※Razor Pagesのテンプレートでも設定項目は同じです。
プロジェクト名を 「UseMySQLProject」と入力し、 次へをクリックします。 |
|
↓ | ↓ |
フレームワーク「.NET 6.0」を選択します。 認証の種類「個別のアカウント」を選択後、作成を選択します。 |
作成が出来たら、一度実行してみます。「▶UseMySQLProject」または、F5キーを押してください。Register/Loginのナビバーがあるアプリが表示されていたら、正しく作成できています。※この時点ではDBを生成していないため、登録/ログインはできません。
では続いて、デフォルトの接続先であるSQL ServerからMySQLに切り替えるよう、処理を変更していきます。
接続先をMySQLに変更
Program.csを開き、以下の行を見つけてください。
//~~
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
//~~
option.UseSqlServerになっています。ここをMySQLに変更する必要があります。しかし、デフォルトのアプリにはオプションにMySQLを選択することはできません。
そのため、NuGetパッケージからMySQLを使用可能にするパッケージを取得します。
ツール(T)→NuGetパッケージマネージャー→ソリューションのNuGetパッケージの管理を選択します。その後、以下の手順を実行してください。
- 参照タブに移動し、「Pomelo」で検索します。
- Pomelo.EntityFrameworkCore.MySQLをクリックします。
- UseMySQLProjectにチェックします。
- インストールをクリックします。
- 変更のプレビューのダイアログが出たら、OKをクリックします。
using Pomelo.EntityFrameworkCore.MySql;
//builder.Services.AddDbContext<ApplicationDbContext>(options =>
// options.UseSqlServer(connectionString)); SQLServerへの接続文字列はコメントアウトor削除
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));
connectionStringは接続文字列を意味します。appsetting.jsonで設定されています。デフォルトではSQLServerへの接続文字列が設定されているため、こちらも変更してあげましょう。
接続文字列の設定
DefaultConnectionの行をコピペし、MySQLのDBへの接続文字列を設定しましょう。以下をコピペしてください。
{
"ConnectionStrings": {
//"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-UseMySQLProject-64EBD089-BCFA-42B1-A482-2BCDE52397B0;Trusted_Connection=True;MultipleActiveResultSets=true"
"DefaultConnection": "server=localhost; port=3306; user=root; password=; database=usemysqlproject;"
},
}
localhostでポート番号3306を通り、ユーザー名はroot、パスワードは無し、データベース名はusemysqlprojectを指定して接続することを意味します。(※rootのパスワードはデフォルトが空白ですが、設定した方がいいです。)
MySQLデータベースの作成
では、MySQLのデータベースへ接続する準備が完璧に整った所で、.NET Core(EF Core)の強力な機能であるマイグレーションを実行していきましょう。
マイグレーションを取り除く
マイグレーションを実行する前に「個別の認証機能(Identity)」が持つデフォルトのマイグレーションを取り除かなければなりません。デフォルトのマイグレーションではSQLServerへの接続を前提としたマイグレーションが実行されている状態です。それをMySQLに書き換えるには不都合がありますので、リセットする必要があります。
お馴染みの流れですが、ツール(T)→NuGetパッケージマネージャー→パッケージマネージャーコンソールを開き、以下のコマンドを入力し、Enterキーを押します。
Remove-Migration
Removing migration ‘00000000000000_CreateIdentitySchema’.
Removing model snapshot.
Done.
上記のメッセージが表示されていたら、マイグレーションを取り除けています。
マイグレーションの実行
パッケージマネージャーコンソールを開き、以下のコマンドを入力し、Enterキーを押します。
今回の場合、InitialCreateMySQLDBというマイグレーションを実行します。
Add-Migration InitialCreateMySQLDB
「To undo this action, use Remove-Migration.」と表示されていれば、マイグレーションが成功しています。赤い背景色の文字列が表示されていたら、マイグレーションに失敗しているので、原因を解決してから、再度実行してください。
よくあるマイグレーションに失敗した時のエラー例はこちらにまとめましたので、ご参照ください。
MySQLデータベースの生成
マイグレーションに成功したら、MySQLデータベースを生成しましょう。XAMPPを起動し、以下のデータベース作成コマンドを実行します。
Update-Database
Done.
上記のメッセージが表示されていたら、生成に成功しています。早速、「▶UseMySQLProject」もしくはF5でアプリを実行しましょう!
まとめ
.NET CoreをMySQLに接続するには以下のステップを踏む必要がありました。
- Program.csのDB接続先をMySQLに変更
- appsetting.jsonの接続文字列をMySQL用に変更
- マイグレーションを実行
- MySQLデータベースの生成
.NET CoreでMySQLを使用する方法をまとめましたが、いかがだったでしょうか。
今回使用した認証機能をカスタマイズする方法についてまとめた記事もありますので、ご確認ください。
以上です。最後までお読みいただき、ありがとうございました!
コメント