RealPath:
WebPath:
2017/09/16 00:08 (JST) 更新
データベース >>

概要

Contents

ASP.NET Core では一般的に DBMS と C# のクラス構造を繋げる仕組みとして EntityFramework が使われる。

DBMS としては SQL Server が使われることが多いが、標準機能で SQLite を利用することもできる。
また、NuGet パッケージ導入により MySQL 等の他 DBMS を利用することも可能。

プロジェクト作成時点でのデータベース設定

MVC プロジェクトをデフォルトの設定でそのまま作成すると、一切データベースが使われないプロジェクトが作られる(そもそも動的なコンテンツの無いプロジェクトが作成されるので、データベースが無くとも動作する)。

データベース設定は手動で行うこともできるが、慣れていないうちはなかなか大変だと思うので、プロジェクト作成時のオプションでデータベースが利用されるような状態にしておくのが好ましい。

アカウント機能付きプロジェクトの作成

プロジェクト作成時にアカウント管理機能のオプションを有効にしておくと、(その機能の実現のために)データベース設定が含まれるプロジェクトが作成される。

ASP.NET Core プロジェクト新規作成時に、テンプレート選択画面の右部にある [Change Authentication] を押し、
img--550--size

表示される Change Authentication ダイアログで [Individual User Accounts] を選択して [OK] を押下。
img--550--size

テンプレート選択画面での「Authentication」の表示が「Individual User Accounts」になっていることを確認し、[OK] を押下。
img--550--size

そうして作成されたプロジェクトには、アカウント管理機能のためのコントローラやデータベースアクセスのための各種クラスや設定項目が最初から付属する形になる。
img--700--size

以下、少しずつ内容を見ていく。

/appsettings.json

データベース接続文字列として ConnectionStrings.DefaultConnection 項目が設定される。デフォルトでは SQL Server の LocalDB に接続する設定となる。

/appsettings.json
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApp…"
  },
  ....
}

/Startup.cs

appsettings.json に設定された各種項目値を IConfiguration により読み取り、UseSqlServer() により SQL Server 接続設定情報をシステムに伝えている。

/Startup.cs
....

public class Startup
{
    ....

    // appsettings.json の内容を読み取るためのもの
    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // appsettings.json から読み取った ConnectionStrings.DefaultConnection の文字列を利用して
        // SQL Server 接続設定を行う
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        ....

/Data/Migrations/00000000000000_CreateIdentitySchema.cs

データベースの初回マイグレーション情報がここに自動で記述される。
詳しく見る必要はないが、テーブル定義情報が長々と書かれていることが確認できる。

/Data/Migrations/00000000000000_CreateIdentitySchema.cs
....

public partial class CreateIdentitySchema : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "AspNetRoles",
            columns: table => new
            {
            ....

初回マイグレーションの実行

マイグレーションは明示的に実行する必要があることに注意。

Package Manager Console 上で Update-Database コマンドを実行することによりマイグレーションを行うことができる。

Package Manager Console
PM> Update-Database
..........
..........
..........
Microsoft.EntityFrameworkCore.Database.Command[200101]
      Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
      VALUES (N'00000000000000_CreateIdentitySchema', N'2.0.0-rtm-26452');
Done.
PM>

プロジェクトの実行

プロジェクトを実行するとアカウント管理機能付きのウェブページが表示される(画面右上にアカウント登録とログイン用のリンクが表示される)。
img--600--size

アカウント登録(Register)リンクをクリックするとアカウント登録画面が開く。
img--600--size

img--600--size

任意のメールアドレスとパスワードを入力して実際にアカウント登録を行うことができる。
img--600--size

アカウントが登録されると自動的にトップページに戻り、ヘッダ部分にアカウント名が表示される。
img--600--size

データベース内容の確認

SQL Server (今回はそのうちの LocalDB 機能) のデータベースは SSMS (SQL Server Management Studio) を使って管理するのが一般的だが、Visual Studio 内にも同じような機能があるため、それだけでも割となんとかなる。

具体的には Visual Studio 内の SQL Server Object Explorer というビューを用いる。このビューは Visual Studio メニューの Views - SQL Server Object Explorer から開くことができる。
img--700--size

appsettings.json 内 ConnectionStrings.DefaultConnection の文字列を参考に、プロジェクトが参照しているデータベースを探す。

以下は ConnectionStrings.DefaultConnection="Server=(localdb)\mssqllocaldb;Database=aspnet-WebApplication73-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true" の環境例。
img--400--size

データベースのツリーを辿り、テーブル項目の右クリックメニューから [View Data] を選択するとレコード内容を閲覧できたりする。
img--700--size