以前、Entiry FrameworkでMySQLを利用する方法を書きましたが、仕事でDapperを使うかもしれないのメモ。使う理由は高速化。DapperだとADO.NETを利用するのとほぼかわらないとか。
環境
- OS:El Capitan(Sierraでも問題なし)
 - MySQL 5.5(MAMP付属のもの)
 - .NET Coreは1.0(ここからダウンロードしてインストール)
 - yo(テンプレート生成)
 
環境構築については私の記事もありますが、少々古いのでここが参考になるかと。
なお、.NET Coreでは新たに提供されたdotnet newコマンドで基本的なテンプレートを作成可能です。詳しくはこちらのサイトが参考になります。
下準備
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つのファイルが出来ているはずです。
dotnet new コマンドでも生成可能です。
- .gitignore
 - Program.cs
 - project.json
 
必要なのは下記2つだけ。
project.jsonの編集
project.jsonのdependenciesにPomeloを追加し、restoreします。
以下、dependenciesだけ抜粋。
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.1"
    },
+    "Dapper": "1.50.2",
+   "MySqlConnector": "0.*"
  },
package.jsonを編集したら忘れずにrestoreし、必要なファイルを取得します。
dotnet restore
Program.csを編集
今回はMemberクラスを作成しマップしましたが、マップしなくても値は取得できるようです。
using System;
using Dapper;
using MySql.Data.MySqlClient;
namespace myapp2
{
    public class Program
    {
        //model
        public class Member
        {
            public int id {get; set;}
            public string name {get; set;}
            public string email {get; set;}
        }
        //Main
        public static void Main(string[] args)
        {
            using(var connection = new MySqlConnection("server=localhost;database=testdb;uid=root;pwd=root"))
            {
                connection.Open();
                //dapper
                var members = connection.Query<Member>("select * from members");
                foreach(var member in members)
                {
                    Console.WriteLine(member.name + " " + member.email);
                }
            }
        }
    }
}
実行する
コーディングが完了したら実行します。
dotnet run
hoge hoge@hoge.com
foo foo@foo.com
うまくいったようです。