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 ドラキー }
次の環境で確認しています。
- Visual Studio 2017
- .NET Core 2.0
- EF Core 2.0
- SQL Server 2016
今回はこのへんで。