ASP.NET Core3.1 とMariaDBでWebアプリケーションを作成する。(データベースファースト)

Webアプリケーション をASP.NET Core3.1のデータベースファーストで作成します。
データベースは、MariaDBを使用します。

前提

  • Windows10
  • MariaDB 10.4
  • VisualStudio 2019 Version 4.8.03752

以下の記事を参考にして、Webアプリケーションのプロジェクトを作成します。
wanouri.hatenablog.com

以下の記事を参考にして、MariaDB環境を構築しテーブルを作成します。
wanouri.hatenablog.com

テーブルは、以下の様なテーブルを準備しました。

CREATE TABLE `items` (
	`code` INT(11) NOT NULL DEFAULT 0 COMMENT '商品コード',
	`name` VARCHAR(50) NULL DEFAULT NULL COMMENT '商品名',
	PRIMARY KEY (`code`)
)
ENGINE=InnoDB
;

プロジェクトファイルを編集する

  1. ソリューションエクスプローラーよりプロジェクトファイルを右クリックして、「プロジェクトファイルの編集」を選択します。
  2. ItemGroupタグに、下記を追加してソリューションのビルドを行います。
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />
  </ItemGroup>

Models生成

  1. ツールよりコマンドラインを選択して、「開発者用PowerShell」を選択します。
  2. EF Core ツールをインストールします。
dotnet tool install --global dotnet-ef
  • 次に以下のコマンドを実行します。
dotnet ef dbcontext scaffold server="localhost;port=3306;database=(sampledb);uid=(user);password=(password);" "Pomelo.EntityFrameworkCore.MySql" --output-dir Models
  • PowerShell にBuild succeeded. と表示されたら、Modelsフォルダに (テーブル名).cs ファイルが作成されています。

appsettings.jsonを編集
下記を追加

"ConnectionStrings": {
    "RazorPagesMovieContext": "server=localhost;port=3306;database=(sampledb);uid=(user);password=(password)"
  }

Startup.csを編集
変更前:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
}

変更後:

static readonly string _RequireAuthenticatedUserPolicy =
                            "RequireAuthenticatedUserPolicy";

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<Models.sampledbContext>(options =>
        options.UseMySql(
            Configuration.GetConnectionString("RazorPagesMovieContext")));

    services.AddControllersWithViews();
    services.AddRazorPages();
    services.AddAuthorization(o => o.AddPolicy(_RequireAuthenticatedUserPolicy,
                            builder => builder.RequireAuthenticatedUser()));
}

スキャフォールディング

  1. ソリューションエクスプローラのControllersを右クリックして、新規スキャフォールディングアイテムをクリックします。
  2. 「Entity Frameworkを使用したビューがあるMVCコントローラ」を選択して追加ボタンをクリックします。

f:id:wanouri:20200514172306p:plain

  1. 「モデルクラス」、「データコンテキストクラス」を選択して追加ボタンを押します。

f:id:wanouri:20200514172524p:plain

デバッグ実行

  • デバッグを開始して、URLの末尾にitemsと付加して更新します。(以下は例)
https://localhost:44335/items
  • テーブルの内容が表示されます。

f:id:wanouri:20200514173101p:plain