Entity Framework Coreはじめました

EF Coreを試しはじめました。先はあまり考えていませんが、色々試したことを書き残していけるといいなと思います。とりあえず今回は最初なのでSQL Serverにあるデータを取得してみます。

データの用意

まずはSQL Server Management Studioでデータを用意しておきます。

-- テーブルを作る
drop table if exists dbo.Monster;
create table dbo.Monster(
    Id int,
    Name nvarchar(20),
    constraint PK_Monster primary key(Id)
);

-- データを投入
insert into dbo.Monster(Id, Name)
output inserted.*
values
    (1, N'スライム'),
    (2, N'ドラキー');
/*
Id          Name
----------- --------------------
1           スライム
2           ドラキー
*/

EF Coreのインストール

ここからはVisual Studioです。.NET Coreのコンソールアプリプロジェクトを作成してNugetで必要なものを取得しましょう。パッケージマネージャーコンソールで以下を実行です。

Install-Package Microsoft.EntityFrameworkCore.SqlServer

エンティティとDBコンテキストの用意

エンティティとDBコンテキストを用意します。

EF6とは違って接続文字列はOnConfiguringメソッド内で指定するみたいです。

個人的な好みでテーブル名は単数形にしたいのですが、EF6にあったPluralizingTableNameConventionのようなクラスはどうもなさそうな?(しっかり調べていない)ので、愚直にToTableメソッドでエンティティをテーブルにマッピングしています。

// エンティティ
public class Monster {
    public int Id { get; set; }
    public string Name { get; set; }
}

// DBコンテキスト
public class AppDbContext : DbContext {
    public DbSet<Monster> Monsters { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
        // 接続文字列を指定する
        var connectionString = new SqlConnectionStringBuilder {
            DataSource = ".",
            InitialCatalog = "Test",
            IntegratedSecurity = true,
        }.ToString();
        optionsBuilder.UseSqlServer(connectionString);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder) {
        // テーブルにマッピングする
        modelBuilder.Entity<Monster>().ToTable("Monster");
    }
}

データの取得

データを取得してみます。このあたりはEF6と同じですね。

using(var dbContext = new AppDbContext()) {
    // データを取得
    var monsters = dbContext.Monsters.ToList();
    foreach (var monster in monsters) {
        Console.WriteLine($"#{monster.Id} {monster.Name}");
    }
    //#1 スライム
    //#2 ドラキー
}

次の環境で確認しています。

今回はこのへんで。

参考