ASP.NET CoreでMySQLを使ってみる -Entiy Frameworkその2

はじめに

今回は、Entiy Framework Coreを使ってデータのやり取りをいい感じにする続きです。

実装

スキャフォールディング

スキャフォールディングとは、CRUD用のページを自動生成することです。
自分で1からコードを書かなくても、一通りの操作ができるページが勝手に作られます。
以下のコマンドを実行することで、スキャフォールディングが行われます。

$ dotnet aspnet-codegenerator razorpage -m User -dc UserContext -udl -outDir Pages/Users --referenceScriptLibraries

処理が成功すると、以下のように出力されます。

Building project ...
Finding the generator 'razorpage'...
Running the generator 'razorpage'...
Attempting to compile the application in memory.
Attempting to figure out the EntityFramework metadata for the model and DbContext: 'User'
Added Razor Page : /Pages/Users/Create.cshtml
Added PageModel : /Pages/Users/Create.cshtml.cs
Added Razor Page : /Pages/Users/Edit.cshtml
Added PageModel : /Pages/Users/Edit.cshtml.cs
Added Razor Page : /Pages/Users/Details.cshtml
Added PageModel : /Pages/Users/Details.cshtml.cs
Added Razor Page : /Pages/Users/Delete.cshtml
Added PageModel : /Pages/Users/Delete.cshtml.cs
Added Razor Page : /Pages/Users/Index.cshtml
Added PageModel : /Pages/Users/Index.cshtml.cs

失敗すると、以下のように出力されますが、エラーメッセージなどは出ないため、原因を見つけるのが大変かもしれません。

Build started...
Build failed.

今回、スキャフォールディングは失敗したわけですが、原因はModelの名前でした。
-mで指定するモデル名と-outDirで指定するフォルダ名が同じである場合、スキャフォールディング後に生成されたファイルを開くと以下のようなエラーメッセージが表示されます。

'ModelName' は 名前空間 ですが、種類 のように使用されています。

例えば、-m User -outDir Pages/Userのような指定をするとエラーとなります。
なので、UserとUsersのように片方を単数形、もう片方を複数形にするなど、名前を別にする必要があります。

マイグレーション

以下のコマンドでマイグレーションが実行されます。

$ dotnet ef migrations add InitialCreate
$ dotnet ef database update

動作確認

以下のページにブラウザでアクセスします。
https://localhost:5001/Users
「Create New」で新規データの追加ができます。その他、読み取り、変更、削除もできます。
データベースの中身を見れば、きちんとデータが入っていることがわかると思います。

ソースコード

今回作成したコードはGitHubで公開しています。
github.com

おわりに

Entiy Framework、初めてしっかり使ってみましたがとても便利だと思いました。
次回からはAzureへのデプロイを試してみようと思います。