Help us understand the problem. What is going on with this article?

ASP.NET Core(Dapper)でMySQLを使う

More than 3 years have passed since last update.

以前、Entiry FrameworkでMySQLを利用する方法を書きましたが、仕事でDapperを使うかもしれないのメモ。使う理由は高速化。DapperだとADO.NETを利用するのとほぼかわらないとか。

環境

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

なお、.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

うまくいったようです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした