画面の実装(2)
ブログ一覧画面の表示
ここまで実装が完了したら、アプリケーションを起動してみましょう。起動完了後、ブラウザから画面を表示して左側のナビゲーションメニューから「Blogs」を選択します。すると、データベースに登録したブログのデータが一覧表示されたかと思います。
続いて、検索フォームから作者名でブログの検索をしてみます。フォームに作者名(筆者の場合「akiba」)を入力して検索ボタンをクリックします。すると、以下の図のように一覧には指定した作者のブログのみが表示されるようになりました。
ここで、アプリケーションを起動したコンソールに出力されているログを確認してみると、「select * from blog where author = @p0」といったSQL文が出力されているかと思います。「@p0」は、Entity Frameworkが生成したパラメータ(スカラー変数)です。
BlogコントローラーのFindByAuthorメソッドで文字列補間を使用している「{author}」という箇所が、「@p0」というスカラー変数に置き換わっていることが分かります。このSQLは、以下のリストのようにSELECT文の手前でDECLARE文を使ってスカラー変数に値を代入することで、sqlcmdなどのSQLクライアントツールからもこのSELECT文を実行して結果を確認することができます。
$ sqlcmd -S localhost -U SA -P 'P@ssw0rd' -Q "\ DECLARE @p0 NVARCHAR(128) = 'akiba';\ -- sqlcmdでSQLを実行する際はテーブル名の前にスキーマ(efcore2.dbo.)を付与する select * from efcore2.dbo.blog where author = @p0"
このようにEntity Framework Core 2.0ではFromSqlメソッドで文字列補間を行う場合、スカラー変数でパラメータ化を行いSQLを実行していることが分かりました。
記事一覧画面の表示
次に記事一覧画面に遷移してみましょう。ブログ一覧画面でいずれかのブログの行をクリックすると記事一覧画面に遷移することができます。記事一覧画面の検索フォームでは記事タイトルの前方一致検索を行うことができます。
以下はフォームに「razor」と入力して検索した結果の画面です。同様に「spa」と入力した場合に、表示される記事一覧の結果が変わるかと思います。
こちらもコンソールに出力されたSQLのログを確認してみましょう。
SELECT [post].[post_id], [post].[blog_id], [post].[created_date], [post].[delete_flg], [post].[post_detail], [post].[post_title] FROM [post] AS [post] WHERE [post].[post_title] LIKE @__title_1 + N'%';
LIKE句が使われていることが分かるかと思います。LIKEに続く「@__title_1」というスカラー変数と「N'%'」という記号が結合されて、最終的に「LIKE 'タイトル名%'」という前方一致検索を行うSQL文を構築していきます。
おわりに
前回と今回にわたってEntity Framework Core 2.0を使ったアプリケーションの構築方法と新機能の紹介をしました。ASP.NET Core 2.0と親和性の高いEntity Framework Core 2.0を使うことで、柔軟かつ簡潔にデータベースアクセスをするアプリケーションが作成できることが分かったかと思います。
次回は、ASP.NET Core 2.0アプリケーションのデプロイや監視といった運用面の機能について紹介していきます。