C# PROGRAM

ASP.NET(C#) MVCモデル入門~データベース接続

WebアプリケーションからSQL Server Express LocalDBに接続する

今回は、C#で作成したWebアプリケーションから、Visual Studio に付属している SQL Server Express LocalDB に接続するプログラムを作成します。
Visual Studio からデータベースをあらかじめ作成しておき、リバースエンジニアリングという技術を使って、データベースに接続するためのクラスを自動で生成し、Webアプリケーションから使えるようにします
リバースエンジニアリングに関する詳しい内容は、以下のマイクロソフトの公式サイトを参照してください。

プロジェクトとデータベースの作成

まず、新規にプロジェクトを作成し、その中でデータベースを作成します。
プロジェクトとデータベースの作成手順は、こちらの記事を参照してください。
今回のプロジェクトとデータベースの仕様は、以下の通りです。

プロジェクト

プロジェクト名MvcApp2
言語C#
フレームワークASP.NET Core Web アプリ(Model-View-Controller) .NET8

データベース

データベース名MvcAppDb
テーブル名Emp
カラム名データ型NULL を許容
Idint
Namenvarchar(10)
ZipCodenchar(8)
Addressnvarchar(50)
Birthdaydate
Emailnvarchar(50)あり
Empテーブル

テーブルの作成が完了したら、データを何件か登録しておいてください。

    NuGetパッケージのインストール

    プロジェクトとデータベースを作成したら、作成したプロジェクトに NuGetパッケージをインストールします。
    ソリューションエクスプローラーからプロジェクト(今回は MvcApp2)にカーソルを合わせて、右クリックから「NuGetパッケージの管理」を選択します。

    cs-mvc-10-1

    NuGetパッケージの管理画面で、以下のパッケージをインストールします。

    • Microsoft.EntityFrameworkCore
    • Microsoft.EntityFrameworkCore.Design
    • Microsoft.EntityFrameworkCore.SqlServer
    • Microsoft.EntityFrameworkCore.Tools
    • Microsoft.VisualStudio.Web.CodeGeneration.Design

    「参照」タブから上記のパッケージを一つずつ選択し、バージョンが「最新の安定版」になっていることを確認して、「インストール」ボタンを押下します。

    cs-mvc-10-2

    「変更のプレビュー」画面が表示されるので、「適用」ボタンを押下します。

    cs-mvc-10-3

    「ライセンスへの同意」画面が表示されるで、「同意する」ボタンを押下します。

    cs-mvc-10-4

    「出力」画面に「正常にインストールされました」というメッセージが表示されるのを確認します。

    cs-mvc-10-5

    必要なパッケージのインストールが全て完了したら、ソリューションエクスプローラーの「依存関係/パッケージ」配下に、インストールしたパッケージが存在することを確認します。

    cs-mvc-10-6

    データベースとの接続情報を登録する

    NuGetパッケージのインストールが完了したら、データベースと接続するための設定を行います。
    ソリューションエクスプローラーの下の方にある「appsettings.json」に、8~10行目の内容を追加します。

    「MvcAppDb」の部分は、データベース名です。

    パッケージマネージャーコンソールを起動する

    メニューバーから「ツール」→「NuGetパッケージマネージャー」→「パッケージマネージャーコンソール」を選択します。

    cs-mvc-10-7

    下図のように、パッケージマネージャーコンソールが表示されます。

    cs-mvc-10-8

    スキャフォールディングコマンド

    パッケージマネージャーコンソールから以下のスキャフォールディングコマンド(Scaffold-DbContext)を使って、データベースの接続に必要なクラスを生成します。

    Scaffold-DbContext 'Name=ConnectionStrings:データベース名' Microsoft.EntityFrameworkCore.SqlServer

    「データベース名」の部分は、「appsettings.json」で指定した名称を使用します。
    また、Scaffold-DbContextコマンドで良く使用するオプションは、以下の通りです。

    オプション内容
    -Force既存のファイルを上書き
    -ContextDirエンティティークラスファイルを格納するフォルダー。 パスはプロジェクトフォルダーに対する相対パス
    -OutputDirDbContextファイルを格納するフォルダー。 パスはプロジェクトフォルダーに対する相対パス
    -Context生成する DbContextクラスの名前
    -NoOnConfiguringデータベース接続情報を DbContextファイルに出力しない。このオプションを指定した場合は、「Program.cs」に接続情報を記述する必要がある

    スキャフォールディングコマンドの詳しい内容は、以下のマイクロソフト公式サイトを参照してください。

    スキャフォールディングコマンドの実行

    パッケージマネージャーコンソールからスキャフォールディングコマンドを実行します。
    なお、「-NoOnConfiguring」オプションを指定しないと、警告メッセージが表示されます
    また、今回は初回なので、「-Force」オプションは使用していませんが、データベースを再作成する場合は必要となります。

    オプションで Context名を指定しない場合は、データベース名に「Context」というサフィックスが付加されます。

    cs-mvc-10-9

    パッケージマネージャーコンソールに「Build succeeded.」と表示されていることを確認します。
    また、ソリューションエクスプローラーの「Data」フォルダー配下に「MvcAppDbContext.cs」、「Models/Entity」フォルダー配下に「Emp.cs」が存在することを確認します。

    cs-mvc-10-10

    Program.csにデータベース接続情報を追加する

    スキャフォールディングコマンドで「-NoOnConfiguring」オプションを指定した場合は、「Program.cs」にデータベースの接続情報を追加する必要があります。
    2行目の using は、DbContextファイルが存在するフォルダーを指定します。
    9~11行目の builder.Services.AddDbContext()メソッドの型は、生成した DbContext名を指定します。
    また、GetConnectionString()メソッドの引数は、appsettings.json で指定したデータベース名になります。
    GetConnectionString()メソッドの詳しい内容は、以下のマイクロソフト公式サイトを参照してください。

    新規にコントローラーとビューを作成してデータベースの内容を表示する

    接続したデータベースの内容を表示するために、新規にコントローラーとビューを作成します。
    ソリューションエクスプローラーから「Controllers」フォルダーにカーソルを合わせて、右クリックから「追加」→「コントローラー」を選択します。

    cs-mvc-10-11

    「新規スキャフォールディング アイテムの追加」画面で、「Entity Framework を使用したビューがある MVC コントローラー」を選択して、「追加」ボタンを押下します。

    cs-mvc-10-12

    以下の画面で、「モデル クラス」と「DbContext クラス」に、スキャフォールディングで自動生成したモデルクラスと DbContextクラスを指定します。
    また、コントローラー名はモデルクラスを選択すると自動で設定されるので、問題がなければ「追加」ボタンを押下します。

    cs-mvc-10-13

    スキャフォールディングが実行されます。

    cs-mvc-10-14

    スキャフォールディングが完了すると、「EmpsController.cs」と「Views」フォルダー配下に「Emps」フォルダーが作成され、その配下に登録用(Create.cshtml)、削除用(Delete.cshtml)、詳細表示用(Details.cshtml)、編集用(Edit.cshtml)、一覧表示用(Index.cshtml)の各ビューが作成されます。

    cs-mvc-10-15

    プログラムを実行する

    プログラムを実行して、表示されたホーム画面のアドレスバーに「https://localhost:<ポート番号>/Emps」と入力します。

    ポート番号は、環境によって異なります。

    cs-mvc-10-16

    データベースの内容を表示する画面に遷移します。

    cs-mvc-10-17

    この画面から登録画面、編集画面、詳細画面、削除画面の各画面に遷移できます。

    -C#, PROGRAM
    -,