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
-,