以前、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
うまくいったようです。