緩くお手軽に .NET Core Web アプリを作ろう(その3)
2019-09-12
azblob://2022/11/11/eyecatch/2019-09-12-create-a-netcore-webapp-loosely-and-easily-part3-000.jpg

前回の続きです。

データベースの下準備

これからデータベースの操作を組んでいくんですが、データベースが空のままだと動作確認したときの楽しさが半減です。
データベースにテスト用のデータが入った状態にしておきましょう。

Data\DbInitializer.cs を開いて、Initialize メソッドを下記のように修正しましょう。

        public static void Initialize(MyDbContext context)
        {
            context.Database.EnsureCreated();

            if (context.Organizations.Any())
            {
                return;   // DB has been seeded
            }

            var orgs = new Organization[]
            {
                new Organization {Name = "営業部"},
                new Organization {Name = "開発部"},
            };
            foreach (var o in orgs)
            {
                context.Organizations.Add(o);
            }
            context.SaveChanges();


            var users = new UserInfo[]
            {
                new UserInfo {Name = "山田太郎", OrganizationId = orgs.First(o => o.Name == "営業部").Id},
                new UserInfo {Name = "田中次郎", OrganizationId = orgs.First(o => o.Name == "開発部").Id},
                new UserInfo {Name = "鈴木三郎", OrganizationId = orgs.First(o => o.Name == "開発部").Id},
            };
            foreach (var u in users)
            {
                context.UserInfoes.Add(u);
            }
            context.SaveChanges();
        }

下記 using の追加が必要です。

using DBAccessSample.Models;

こうしておくことで、アプリ起動時に組織情報テーブルが空だったら、テスト用データをデータベースに入れることができます。

お手軽にデータベース操作処理を作りたい!

前回まででデータベースの作成はできましたが、データベースを操作する処理が作られていないので、今回はその辺りを整備していきましょう。

データベースを操作する処理って何でしょう?
データベースとのアクセスに必要なライブラリを用意して、SQL文を書いて、なんてことを想像する方もいらっしゃるかと思いますが、C# と SQL Server 系の DB の組み合わせであれば、Entity Framework Core を使用し SQL の代わりに LINQ を使ってデータベース操作ができます。

よって C# でゴリゴリ書いていけばよいんですが、よくあるデータベース操作(一覧表示、データ1件追加、データ1件修正、データ1件削除)を毎回自分で書くのは面倒ではありませんか?
Visual Studio を使用すれば、よくある操作は自動で実装してくれちゃいます。
スキャフォールディングという機能です。

スキャフォールディングによる自動実装

何だか聞きなれない言葉ですが、安心してください、簡単です。
早速やってみましょう。

ソリューション エクスプローラーで Controller フォルダを右クリックして、「追加」→「コントローラー」を選びます。
「スキャフォールディングを追加」ダイアログが出るので、「Entity Framework を使用したビューがある MVC コントローラー」を選んで「追加」を押しましょう。

「Entity Framework を使用したビューがある MVC コントローラー」ダイアログが表示されるので、必要事項を設定しましょう。まずは組織情報に関するものを作りましょう。

  • モデルクラス:Organization
  • データコンテキスト クラス:MyDbContext

これでコントローラー名が自動設定されるはずなので、「追加」ボタンでスキャフォールディングを実行しましょう。

しばらく待つと、いくつかファイルが作成されました。
Controllers フォルダに OrganizationsController.cs が、 Views フォルダに Organizations フォルダが作成され、いくつかの cshtml ファイルが作られました。
以上で組織情報テーブルに対するデータベース処理が完成です!
超簡単ですね!

早速起動してみましょう。

一見、何も変わっていないように見えますが、これは今回修正を加えていないトップページなので想定通りです。
コントローラーを追加したので、URL 指定すれば今回追加した画面が見れます。
下記の URL に移動してみてください。

https://localhost:xxxxx/Organizations

xxxxx の部分はトップ画面で出ているポート番号のままにしてください。

おお~、無事に組織情報のテストデータが一覧表示されました。
Create NewEdit 等のリンクでデータの追加編集削除も可能です。動かしてみてください。
一通り遊んでみたら、追加されたコードも確認してみてください。
今回は詳細の説明を避けますが、非常に参考になるコードが作られていますので、読み解いてみると良いですね。
ちなみに .NET Framework の頃とは内容が違いますよ?

ユーザ情報も同じくスキャフォールディングすれば出来上がり!と言いたいところですが、組織情報との関連を持っているので一手間加える必要があります。
次回解説していきたいと思います。