公式サイトのチュートリアルを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/tcp
Webプロジェクトの作成
ここは公式サイト通り
[ファイル]
->[新規作成]
->[プロジェクト]
- テンプレートの中から
[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-ef
POSTメソッドの確認
公式サイトと同じように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 |
+----+----------+------------+
今回はここまで