LoginSignup
18
12

More than 5 years have passed since last update.

ASP.NET Core Web アプリケーションでMySQLを使う

Last updated at Posted at 2017-11-09

はじめに

突然ASP.NET Coreを触ることになったので、勉強がてら適当なアプリを作り始めたのですが、
DBからデータを読み込んだり書き込んだりするという初歩的なところでハマってしましました。
せっかく調べたので、やったことをまとめておきたいと思います。

環境

DBサーバ

App Version
CentOS 7.4
MySQL 5.7

開発環境

App Version
Windows Windows 10
Visual Studio 2017
.Net Core 1.1

DBの準備

VPSにMySQLをセットアップして、適当なテーブルを用意します。
DBには、SSLで接続できるようにしてください。
今回はテスト用に「MyTests」テーブルを作りました。

MyTests

カラム名 備考
Id int(11) AI, PK
Name varchar(45)
Age int(11)

ASP.NET Core プロジェクトを作成

Visual Studio 2017で、ウィザードに従ってプロジェクトを作成します。
ここでは、ASP.NET Core 1.1を使って進めていきます。

01_CreateProject.png

MySql.Data.EntityFrameworkCoreをインストール

MySQLにアクセスするには「MySql.Data.EntityFrameworkCore」が必要なので、NuGetパッケージマネージャーを使ってインストールします。
最新の安定版である6.10.4をインストールしました。

02_Install-MySqlDataEF.png

テーブルに対応したクラスを用意

データを読み書きしたいテーブルに対応するクラスを作成します。
Modelsフォルダの下に、「MyTest.cs」を用意して、MyTestクラスを作成しました。

[追記]
実行時に、「プライマリーキーがない」というエラーが出る場合は、System.ComponentModel.DataAnnotationsをusingして、プライマリーキーとなるメンバーのすぐ上に[Key]を追記するとうまくいきます。

03_Create-Table-Class.png

コンテキストクラスを用意

DBとやり取りするためのコンテキストクラスを用意します。
このクラスは、DBContextの派生クラスで、DBSet型のメンバーを持つクラスです。
Dataフォルダの下に、「MySQLSampleDbContext.cs」を用意して、MySQLSampleDbContextクラスを作成しました。

04_Create-DBContextClass.png

DBとの接続に必要な情報を用意

appsettings.jsonのConnectionStringsに、接続文字列を追加します。

"MySQLSampleDbConnection": "Server=<IP Address>;Database=<DB Name>;User Id=<DB User Name>;Password=<Password>;"

適宜、以下のように読みかえてください。

項目 内容
< IP Address > DBサーバのアドレス
< DB Name > DBの名前
< DB User Name > DBのユーザ名
< Password > DBのパスワード

05_ConnectionString.png

Framework Serviceを追加

StartupクラスのConfigureServicesの中で、用意したMySQLSampleDbContextをserviceに追加します。
GetConnectionStringの引数に渡している文字列は、appsettings.jsonに追加した接続文字列のキーです。

06_AddService.png

テーブルからデータを読んでみる

試しにテーブルからデータを読み込んで見ました。
MyTestControllerを用意すると、良い感じでDbContextが降って来るので、それを使ってデータを読み込み、Viewに渡して表示しています。

07_LoadDataFromDB.png

ソースコード

折角なので、プロジェクトをGitHubに上げておきました。
接続文字列は適宜自分の環境に差し替えてください。

MySQL_Sample

18
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
12