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 を許容 |
---|---|---|
Id | int | |
Name | nvarchar(10) | |
ZipCode | nchar(8) | |
Address | nvarchar(50) | |
Birthday | date | |
nvarchar(50) | あり |
テーブルの作成が完了したら、データを何件か登録しておいてください。
NuGetパッケージのインストール
プロジェクトとデータベースを作成したら、作成したプロジェクトに NuGetパッケージをインストールします。
ソリューションエクスプローラーからプロジェクト(今回は MvcApp2)にカーソルを合わせて、右クリックから「NuGetパッケージの管理」を選択します。
NuGetパッケージの管理画面で、以下のパッケージをインストールします。
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Tools
- Microsoft.VisualStudio.Web.CodeGeneration.Design
「参照」タブから上記のパッケージを一つずつ選択し、バージョンが「最新の安定版」になっていることを確認して、「インストール」ボタンを押下します。
「変更のプレビュー」画面が表示されるので、「適用」ボタンを押下します。
「ライセンスへの同意」画面が表示されるで、「同意する」ボタンを押下します。
「出力」画面に「正常にインストールされました」というメッセージが表示されるのを確認します。
必要なパッケージのインストールが全て完了したら、ソリューションエクスプローラーの「依存関係/パッケージ」配下に、インストールしたパッケージが存在することを確認します。
データベースとの接続情報を登録する
NuGetパッケージのインストールが完了したら、データベースと接続するための設定を行います。
ソリューションエクスプローラーの下の方にある「appsettings.json」に、8~10行目の内容を追加します。
「MvcAppDb」の部分は、データベース名です。
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "ConnectionStrings": { "MvcAppDb": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=MvcAppDb" }, "AllowedHosts": "*" } |
パッケージマネージャーコンソールを起動する
メニューバーから「ツール」→「NuGetパッケージマネージャー」→「パッケージマネージャーコンソール」を選択します。
下図のように、パッケージマネージャーコンソールが表示されます。
スキャフォールディングコマンド
パッケージマネージャーコンソールから以下のスキャフォールディングコマンド(Scaffold-DbContext)を使って、データベースの接続に必要なクラスを生成します。
Scaffold-DbContext 'Name=ConnectionStrings:データベース名' Microsoft.EntityFrameworkCore.SqlServer
「データベース名」の部分は、「appsettings.json」で指定した名称を使用します。
また、Scaffold-DbContextコマンドで良く使用するオプションは、以下の通りです。
オプション | 内容 |
---|---|
-Force | 既存のファイルを上書き |
-ContextDir | エンティティークラスファイルを格納するフォルダー。 パスはプロジェクトフォルダーに対する相対パス |
-OutputDir | DbContextファイルを格納するフォルダー。 パスはプロジェクトフォルダーに対する相対パス |
-Context | 生成する DbContextクラスの名前 |
-NoOnConfiguring | データベース接続情報を DbContextファイルに出力しない。このオプションを指定した場合は、「Program.cs」に接続情報を記述する必要がある |
スキャフォールディングコマンドの詳しい内容は、以下のマイクロソフト公式サイトを参照してください。
スキャフォールディングコマンドの実行
パッケージマネージャーコンソールからスキャフォールディングコマンドを実行します。
なお、「-NoOnConfiguring」オプションを指定しないと、警告メッセージが表示されます。
また、今回は初回なので、「-Force」オプションは使用していませんが、データベースを再作成する場合は必要となります。
オプションで Context名を指定しない場合は、データベース名に「Context」というサフィックスが付加されます。
パッケージマネージャーコンソールに「Build succeeded.」と表示されていることを確認します。
また、ソリューションエクスプローラーの「Data」フォルダー配下に「MvcAppDbContext.cs」、「Models/Entity」フォルダー配下に「Emp.cs」が存在することを確認します。
Program.csにデータベース接続情報を追加する
スキャフォールディングコマンドで「-NoOnConfiguring」オプションを指定した場合は、「Program.cs」にデータベースの接続情報を追加する必要があります。
2行目の using は、DbContextファイルが存在するフォルダーを指定します。
9~11行目の builder.Services.AddDbContext()メソッドの型は、生成した DbContext名を指定します。
また、GetConnectionString()メソッドの引数は、appsettings.json で指定したデータベース名になります。
GetConnectionString()メソッドの詳しい内容は、以下のマイクロソフト公式サイトを参照してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using Microsoft.EntityFrameworkCore; using MvcApp2.Data; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddDbContext<MvcAppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("MvcAppDb")) ); var app = builder.Build(); ~ 以下略 ~ |
新規にコントローラーとビューを作成してデータベースの内容を表示する
接続したデータベースの内容を表示するために、新規にコントローラーとビューを作成します。
ソリューションエクスプローラーから「Controllers」フォルダーにカーソルを合わせて、右クリックから「追加」→「コントローラー」を選択します。
「新規スキャフォールディング アイテムの追加」画面で、「Entity Framework を使用したビューがある MVC コントローラー」を選択して、「追加」ボタンを押下します。
以下の画面で、「モデル クラス」と「DbContext クラス」に、スキャフォールディングで自動生成したモデルクラスと DbContextクラスを指定します。
また、コントローラー名はモデルクラスを選択すると自動で設定されるので、問題がなければ「追加」ボタンを押下します。
スキャフォールディングが実行されます。
スキャフォールディングが完了すると、「EmpsController.cs」と「Views」フォルダー配下に「Emps」フォルダーが作成され、その配下に登録用(Create.cshtml)、削除用(Delete.cshtml)、詳細表示用(Details.cshtml)、編集用(Edit.cshtml)、一覧表示用(Index.cshtml)の各ビューが作成されます。
プログラムを実行する
プログラムを実行して、表示されたホーム画面のアドレスバーに「https://localhost:<ポート番号>/Emps」と入力します。
ポート番号は、環境によって異なります。
データベースの内容を表示する画面に遷移します。
この画面から登録画面、編集画面、詳細画面、削除画面の各画面に遷移できます。