公式サイトのチュートリアルをMySQLで実現してみたのでその記録
検証環境
- OS: Windows 10
- IDE: Visual Studio 2019
MySQLはDocker Composeで起動
docker-compose.yml を作成し、以下の内容を記載する。
(今回は検証なのでパスワードは一律で password にしておく)
version: '3'
services:
db:
image: mariadb:10
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
environment:
MYSQL_DATABASE: todoapi
MYSQL_USER: todoapi
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"以下のコマンドを実行し、MySQLサービスを起動しておく。
docker-compose up -d以下のコマンドで起動しているか確認できる。
> docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------
todoapi_db_1 docker-entrypoint.sh mysql ... Up 0.0.0.0:3306->3306/tcpWebプロジェクトの作成
ここは公式サイト通り
[ファイル]->[新規作成]->[プロジェクト]- テンプレートの中から
[ASP.NET Core Webアプリケーション]を選択して[次へ]をクリック

- プロジェクト名に
TodoApiと入力して[作成]をクリック

[新しいASP.NET Core Webアプリケーションの作成]ダイアログで[.NET Core]と[ASP.NET Core 3.1]が選択されていることを確認[API]テンプレートを選択して[作成]をクリック

モデルクラスの追加
ここも公式サイト通り
- プロジェクト直下に
Modelsフォルダを作成 Modelsフォルダ直下にTodoItemクラスを作成TodoItemクラスに以下のコードを追加
public class TodoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}データベースコンテキストの追加
公式サイトではSQLServerをインストールするが、今回はMySQLをインストールする。
[ツール]->[NuGetパッケージマネージャー]->[ソリューションのNuGetパッケージの管理][参照]タブを選択し、検索ボックスにPomelo.EntityFrameworkCore.MySqlと入力- 左側のウィンドウで
[Pomelo.EntityFrameworkCore.MySql]を選択 - 右側のウィンドウで
[プロジェクト]チェックボックスをオンにして[インストール]をクリック

TodoContextデータベースコンテキストの追加
ここは公式サイト通り
Modelsフォルダ直下にTodoContextクラスを作成TodoContextクラスに以下のコードを追加
using Microsoft.EntityFrameworkCore;
namespace TodoApi.Models
{
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<TodoItem> TodoItems { get; set; }
}
}データベースコンテキストの登録
データベース接続情報を記載するため、公式サイトとは異なる設定をする。
appsettings.jsonを編集して以下を追加
"ConnectionStrings": {
"MySQL": "Server=127.0.0.1;Database=todoapi;User=todoapi;Password=password;"
}Startup.csを編集して以下を追加
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
(中略)
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<TodoContext>(opt =>
opt.UseMySql(Configuration.GetConnectionString("MySQL")));
services.AddControllers();
}コントローラーのスキャフォールディング
公式サイト通り
Controllersフォルダを右クリック[追加]->[新規スキャフォールディングアイテム][Entity Frameworkを使用したアクションがあるAPIコントローラー]を選択して[追加]をクリック

[Entity Frameworkを使用したアクションがあるAPIコントローラーの追加]ダイアログで以下を選択- モデルクラスで
[TodoItem (TodoApi.Models)]を選択 - データコンテキストクラスで
[TodoContext (TodoApi.Models)]を選択
- モデルクラスで
[追加]をクリック

PostTodoItem作成メソッドの確認
公式サイト通り
TodoItemsController.csのPostTodoItemメソッドの return文を以下のように変更
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);データベースのマイグレーション
ここは公式サイトにはない手順。
マイグレーションはコマンドラインから行う。
Visual Studioのプロジェクトを作成したフォルダで以下のコマンドを実行する。
dotnet ef migrations add DbInit
dotnet ef database update(参考) dotnet-ef サブコマンドがインストールされていなければ以下のコマンドでインストールする
dotnet tool install --global dotnet-efPOSTメソッドの確認
公式サイトと同じようにPostmanを使って確認する。

GETメソッドの確認
公式サイトと同じようにPostmanを使って確認する。

データベースを直接確認する
以下のコマンドでデータが作成されていることを確認する。
> docker exec -t todoapi_db_1 mysql -u todoapi -ppassword todoapi -e "SELECT * FROM TodoItems;"
+----+----------+------------+
| Id | Name | IsComplete |
+----+----------+------------+
| 1 | walk dog | 1 |
+----+----------+------------+今回はここまで