ASP.NET COREマイグレーションエラーが発生
現在Blazorの学習を兼ねて友人から依頼されたデータベースアクセスのアプリケーションを作成しています。手始めにDBアクセスにEntity Framework Coreを使用してみたのですが、表題のエラーが発生しました。結構あっけなく解決できたのですが、意外なところで見落としがちなことでしたので誰かの解決のヒントになることを期待して記事にします。(備忘録としても)
前提
開発環境
- MacOS 13.1
- .Net 6.0.405
- Visual Studio Code 1.75.0
- MySQL 8.0.32
- Microsoft.EntityFrameworkCore 7.0.2
- Microsoft.EntityFrameworkCore.Design 7.0.2
- Microsoft.EntityFrameworkCore.SqlServer 7.0.2
- Pomelo.EntityFrameworkCore.MySql 7.0.0
Dockerは使用せずローカルにて環境構築を実施。
また、dotnet ef migration add
を実行して、マイグレーションフォルダは作成済み。
使用するデータベースも作成済み。(他のMySQLとポートが被らないように ポートは3307を使用)
著者のスキル
- PHP/Laravel歴が最も長い(3年程度ですが…)
- C#はこの1年間、業務で使用(
レガシー技術Web Formsで使用) - キャッチアップも兼ねてBlazorを学習中(
JS書きたくないから)
初心者なので生暖かく読んで頂けると幸い。
発生したエラー
マイグレーションフォルダも作れたし、dotnet ef migration add
でデータベースとテーブルを作っちゃうぞっと…は?
どうやらデータベース接続できないと言ってるようだ…(なんでや!)
接続文字列も設定できていると思うのだが…
var connectionString = "server=localhost;user=root;password=12345678;database=hoge";
原因
エラー文中のconnection to database
を見て思ったのだが、そもそもDBが空ってどういうことなのかと。
ふと思いついたのが別アプリ用のDockerでポート3306を使用しているため、今回のDBは前提条件で書いたように3307を使用している…つまりポート番号を指定してあげれば…
顛末
var connectionString = "server=localhost;user=root;port=3307;password=12345678;database=hoge";
port=3307
を接続文字列内で指定。これで後はDBアップデートのコマンドdotnet ef database update
を叩けば…
やったぜ
おわりに
改めてエラー文を読むと解決の糸口になりますね。今回の例だと直接原因が書かれている訳ではないのですが、DBに接続できていない→設定が間違っているというひらめき(大袈裟)に繋がりました。
ローカル環境でMySQLを構築したのでデフォルトポート番号3306が空いていると勘違いしていた結果がこれだよ!
複数のDB環境をローカルで構築する時のポート番号管理ってどうすればよいのか…もっと調査、勉強をしないとなあ…
おしまい。