LoginSignup
10

More than 5 years have passed since last update.

ASP.NET Core(EF Core)でMySQLを使う 2016年11月編

Last updated at Posted at 2016-11-16

ASP.NET Core 1.0がリリースされて久しいですが、いっこうにMySQLでの利用サンプル(特にモデルファースト)が無いので調べてみた結果をとりあえずメモ。

この記事は古いので、2017年5月編をご覧くさい。

環境

環境構築については私の記事もありますが、少々古いのでここが参考になるかと。

どのプロバイダを使うか?

マイクロソフトのサンプルページでは下記の3種類紹介されています。

Official

MySQLのオフィシャルらしい。が、更新が夏頃からされておらずやる気が感じられない。
このページなどが参考になる。

Pomelo

雰囲気良さそう。GitHubの情報で何とかなりそう。

Sapient Guardian

Pomeloに比べるとGitHub上の活性は低いかな。。。

というわけでとりあえずPomeloとやらを利用してみることにします。

MySQLからデータを取得してみる

とりあずSELECTしてみる。タイトルはASP.NETとしたが、コードが複雑になるのでConsoleアプリとして実装してみます。

MySQLにテーブルを作成する

今回はサンプルなので簡単なテーブルにします。なお、Entity Frameworkを利用するにはテーブルに主キーが必要なので定義しておきましょう。

membersというテーブルを作り、idとnameとemailのカラムを作ります。
サンプルデータもインサートしておきます。

#CREATE TABLE
create table members(
    id int primary key auto_increment,
    name varchar(32),
    email varchar(64)
);

#SAMPLE INSERT
insert into members(name,email) values('hoge','hoge@hoge.com');
insert into members(name,email) values('foo','foo@foo.com');

yoでConsole Applicationテンプレートを生成

yo -> ASP.NET -> Console Applicationと選択し、テンプレートを生成します。
初期状態で下記3つのファイルが出来ているはずです。

  • .gitignore
  • Program.cs
  • project.json

必要なのは下記2つだけ。

project.jsonの編集

project.jsonのdependenciesにPomeloを追加し、restoreします。

以下、dependenciesだけ抜粋。

  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.1"
    },
+    "Pomelo.EntityFrameworkCore.MySql": "1.1.0-*",
+    "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final"
  },

package.jsonを編集したら忘れずにrestoreし、必要なファイルを取得します。

dotnet restore

Program.csを編集

本当はModelを別クラスにした方が分かりやすいですが、面倒なのでProgram.csに全て書きます。
Entity Frameworkを経由してデータベースを利用するためには、

  • テーブルに相当するModelクラス
  • テーブル(データベース)とモデルクラスをマップするContextクラス

の2つを最低限定義する必要があります。以下の通り定義します。

using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;

namespace myapp1
{
    public class Program
    {

        //Model
        public class Member
        {
            public int id {get; set;}
            public string name {get; set;}
            public string email {get; set;}
        }

        //Context
        public class MyContext : DbContext
        {
            public DbSet<Member> Members {get; set;}
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
                => optionsBuilder.UseMySql(@"server=localhost;database=testdb;uid=root;pwd=root;");
        }


        //Main
        public static void Main(string[] args)
        {
            using(var context = new MyContext())
            {
                var ret = context.Members
                    .ToList();

                foreach(var x in ret)
                {
                    Console.WriteLine($"{x.name} {x.email}");
                }
            }
        }
    }
}

実行する

コーディングが完了したら実行します。

dotnet run

hoge hoge@hoge.com
foo foo@foo.com

うまくいったようです。

その他

いちおう挿入・更新・削除なども。usingステートメントの中に書きましょう。
Linq使うとか、LIKEはどうすんだ?とかいろいろありますが、それはEntity Frameworkの使い方調べましょう。

//insert
var member = new Member();
member.name = "tanaka";
member.email = "tanaka@test.com";

context.Add(member);
context.SaveChanges();

//update
var member = context.Members.Single(x=> x.name == "tanaka");
member.name = "suzuki";
context.SaveChanges();


//delete
var member = context.Members.Single(x=> x.name == "suzuki");
context.Members.Remove(member);
context.SaveChanges();

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
10