.NET Coreはいいと思うのだけれど、MySQLとかを利用できなければ結局Linux上とかでは使わないな・・・というのが正直なところでした(まあ、今となってはSQLServerもLinuxで動きますが)。
一方、MySQL用のドORM?はサードパーティ系しかなく、「うーん」って感じでした。が、しばらく動向を追わないうちに、2017年3月にOracleからオフィシャルのMySQL.Data.EntityFrameworkCoreというのが出たようなので試してみます。
この記事が最後の調査となればいいのですが。。。
project.jsonが廃止され、.csprojファイルになったんですね。。。
環境
私はMac上で利用しています。.NET Coreのバージョン(これややこしいですが)はいわゆる1.0.4です。
準備とインストール
DBの準備
とりあえず、ローカルのMySQLにmemberテーブルを作成し、id,name,emailを作りました。
適当にデータも追加しておきます。
create table member
(
id int primary key auto_increment,
name varchar(32),
email varchar(32)
);
作業場の作成
今回はコンソールアプリとして実装してみます。
cd
mkdir mysql
cd mysql
dotnet new console
MySQL.Data.EntityFrameworkCoreのインストール
バージョンを指定しないと怒られました。
インストールすると依存関連ファイルも追加されます。
dotnet add package MySql.Data.EntityFrameworkCore -v 7.0.7-m61
インストールしたら、
dotnet restore
で関連ファイルをダウンロードします。
実装
いろいろな書き方ができますが、過去記事との互換性を重視して、シンプルに書きます。
コード
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
namespace mysql
{
//接続準備(まあ、普通は別のcsに書く)
//モデル
public class Member
{
public int id{get;set;}
public string name{get;set;}
public string email {get;set;}
}
//DbContext(DBとクラス情報をマップする)
public class MyContext:DbContext
{
public DbSet<Member> Members{get;set;}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseMySQL(@"server=localhost;database=testdb;userid=root;password=root;sslmode=none;");
}
//メインのコード
class Program
{
static void Main(string[] args)
{
using(var context = new MyContext())
{
var ret = context.Members.ToList();
foreach(var x in ret)
{
Console.WriteLine($"{x.id} {x.name}");
}
}
}
}
}
実行
dotnet run
とりあえず動きました。以上です。