10月15日(火)1、2コマ目

今日、やったこと

  • DBのリレーションをたどる
  • [練習問題]練習問題3
  • 検索アプリを作る

今日のホワイトボード

DBのリレーションをたどる

CS_商品マスタとCS_グループマスタを結合して、グループIDではなく、グループ名を表示したい。

図 グループIDをグループ名に変更

2つのテーブル間のリレーションシップと同じように、Itemクラスに結合するGroupクラスのインスタンスを格納するGroupプロパティを追加。このプロパティをナビゲーションプロパティと呼ぶ。

図 ItemクラスにGroupプロパティを追加

ソースコードをあげておきます。

appsettings.json

DB接続文字列を設定。以前と同じ。

Models/Group.cs

CS_グループマスタに対応するクラス。


Models/Item.cs

CS_商品マスタテーブルに対応するクラス。

ナビゲーションプロパティ"Group"経由で結合すべきGroupクラスのインスタンスにアクセスできる


Data/SampleDbContext.cs

CS_グループマスタにアクセスするためのGroupsプロパティ、CS_商品マスタにアクセスするためのItemsプロパティがある。


Controllers/SearchController.cs

アクションメソッドAll()にて、CS_グループマスタ、CS_商品マスタ検索結果を取得。

取得した検索結果はViewData経由でビューに渡す。


Views/Search/All.cshtml

ViewData経由で渡された検索結果を表示。


Program.cs

DI機能でSampleDbContextのインスタンスを生成。

以前と同じ。


[練習問題]練習問題3

練習問題2で使った3つのテーブルを結合した結果を表示する。

正解例をあげておきます。

Models/Maker.cs

メーカーマスタに対応するクラス。


Models/Genre.cs

製品ジャンルマスタに対応するクラス。


Models/Camera.cs

製品マスタに対応するクラス。

参照するメーカーマスタ、ジャンルマスタのためのMakerプロパティ、Genreプロパティがある。


Data/SearchDbContext.cs

練習問題2と同じ。


Controllers/CameraController.cs

製品マスタだけを取得(Camerasプロパティだけアクセス)しても、参照するメーカーマスタ、製品ジャンルマスタを取得できない。


その1 3つのテーブルをすべて取得

Index()メソッドにて、製品マスタを全件検索(SearchDbContextのCameraプロパティアクセス)。この段階では参照先のデータは未取得。

メーカーマスタ、ジャンルマスタも全件検索(Makersプロパティ、Genresプロパティにアクセス)すれば製品マスタが参照するデータも取得できる。

図 DbContextのプロパティ



その2 Include()で不足データを取得

製品マスタが参照するメーカーマスタ、ジャンルマスタをInclude()で取得する。

図 Include()メソッドで不足するデータを取得



Views/Camera/Index.cshtml

ViewData経由で渡された製品一覧を表示。


appsettings.jsonやProgram.csは今までと同じ。


検索アプリを作る

今まで違うのはボタンをクリックしたときの処理。

HTTPのGETコマンドではなく、POSTコマンドでリクエスト

パラメータはクエリパラメータ、パスパラメータではない

図 今までとの違い


途中まで作りました。ソースコードをあげておきます。

Models/Group.cs

CS_グループマスタに対応するクラス。


Models/Item.cs

CS_商品マスタに対応するクラス。

ナビゲーションプロパティGroupでリレーションをたどってグループ情報を取得


Data/SearchDbContext.cs

今までと同じ。


Controllers/SearchController.cs

とりあえず http://xxxx/Search でアクセスするとグループ一覧が選択できるようにした。


Views/Search/Index.cshtml

とりあえず http://xxxx/Search でアクセスするとグループ一覧が選択できるようにした。


次回は

検索アプリのつづき。

グループを選択したら、選択グループの商品を検索できるように改造。


このブログの人気の投稿

10月31日(木)1、2コマ目

11月7日(木)1、2コマ目