.NET Core6.0でMySQLを使用する方法。XAMPPでのローカル接続と絶対に注意したいポイント

スポンサーリンク
プログラミング

こんにちは、しゅんです!

データベース 最近、会社の研修で.NET Core MVCと
SQL Serverを使用したWebアプリを作っていました。
いざ、試運転に会社のLinuxサーバーへ公開する直前に、
問題が発生し、急遽DBをMySQLに切り替えることになりました。MySQLへ接続するために、
仮想マシンでテストサーバーを立てるのが大変だったので、
ローカル環境で簡単にテストができる「XAMPP」を使用しました。
その時に調べたこと、つまづいたところをまとめましたので、
参考にしていただければ幸いです。

SQL Serverを使えなかった経緯

社内試運転のためのサブドメインで公開する予定でした。しかし、そのサーバーではSQLServerを動かすにはスペック不足だと判明。サーバー管理者の方から「MySQLでやった方がいいんじゃない?」と軽く言われ、今更どうしよう、、と非常に焦りました。
とはいっても、.NETは公式ドキュメントが充実しているので、探せばあるかな、、くらいの気持ちで考えていましたが、

▼SQLServerとMySQLの推奨スペック一覧表▼

 

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 XAMPPはWebアプリの開発に必要なWebサーバー、
データベースなどを一括でダウンロードし、
インストールできるソフトです。

XAMPPを使うことでGUIメインでMySQLを操作する「phpMyAdmin」を利用できます。

XAMPPとは

X(クロス) A(Apache) M(MySQL/MariaDB) P(PHP) P(Perl/Python)が由来です。

XAMPP(ザンプ)とは、アプリケーションの開発環境をローカルで簡単に構築できたり、開発に欠かせないソフトウェアや便利なツールを無料で一括インストールできたりするパッケージのことです。

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パッケージの管理を選択します。その後、以下の手順を実行してください。

  1. 参照タブに移動し、「Pomelo」で検索します。
  2. Pomelo.EntityFrameworkCore.MySQLをクリックします。
  3. UseMySQLProjectにチェックします。
  4. インストールをクリックします。
  5. 変更のプレビューのダイアログが出たら、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キーを押します。

マイグレーション(Migration)….NET CoreにおけるマイグレーションとはDBを作成、更新、削除などのクエリ文をEF Coreが自動生成してくれる機能のこと。PMC(パッケージマネージャーコンソール)で「Add-Migration xxxx(マイグレーション名)」と入力する。マイグレーションした段階ではDBの更新はされないので、その後に「Update-Database」を実行することでDBに結果が反映される。

今回の場合、InitialCreateMySQLDBというマイグレーションを実行します。

Add-Migration InitialCreateMySQLDB

「To undo this action, use Remove-Migration.」と表示されていれば、マイグレーションが成功しています。赤い背景色の文字列が表示されていたら、マイグレーションに失敗しているので、原因を解決してから、再度実行してください。

よくあるマイグレーションに失敗した時のエラー例はこちらにまとめましたので、ご参照ください。

MySQLデータベースの生成

マイグレーションに成功したら、MySQLデータベースを生成しましょう。XAMPPを起動し、以下のデータベース作成コマンドを実行します。

Update-Database
XAMPPを起動し、MySQLを起動させましょう。Start→Stopに表示が変わっていればOKです。

Done.

上記のメッセージが表示されていたら、生成に成功しています。早速、「UseMySQLProject」もしくはF5でアプリを実行しましょう!

Registerページにアクセスします。
ここでは、
Mail:Pass_word1@gmail.com
PW:Pass_word1と入力します。※.NET Coreのパスワード入力規則は
大文字+数字+記号を1字以上です。
Click here to confirm your account」をクリックして、
アカウントを認証します。
認証されました。次に、Loginページへアクセスします。
先ほど登録したメールアドレスと
パスワードを入力します。
ログインできました。

まとめ

.NET CoreをMySQLに接続するには以下のステップを踏む必要がありました。

  1. Program.csのDB接続先をMySQLに変更
  2. appsetting.jsonの接続文字列をMySQL用に変更
  3. マイグレーションを実行
  4. MySQLデータベースの生成

.NET CoreでMySQLを使用する方法をまとめましたが、いかがだったでしょうか。

今回使用した認証機能をカスタマイズする方法についてまとめた記事もありますので、ご確認ください。

以上です。最後までお読みいただき、ありがとうございました!

コメント

タイトルとURLをコピーしました