はじめに
今回は、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のように片方を単数形、もう片方を複数形にするなど、名前を別にする必要があります。
動作確認
以下のページにブラウザでアクセスします。
https://localhost:5001/Users
「Create New」で新規データの追加ができます。その他、読み取り、変更、削除もできます。
データベースの中身を見れば、きちんとデータが入っていることがわかると思います。
ソースコード
今回作成したコードはGitHubで公開しています。
github.com
おわりに
Entiy Framework、初めてしっかり使ってみましたがとても便利だと思いました。
次回からはAzureへのデプロイを試してみようと思います。