SlideShare a Scribd company logo
12
Most read
19
Most read
22
Most read
Entity Framework(Core)
についての概要を学ぼう
株式会社SAKURUG
エンジニアリングユニット
草場 友光
.NET ラボ 2022年4月
自己紹介
• 普段は主にWebFormsアプリ
の保守のお仕事をしてます。
• 古めのシステムが多いので時
代に取り残されぬよう新しい技
術を一つでも入れるよう日々努
力しています。
• tomo_kusaba
宣伝
【VISION】ひとの可能性を開花させる企業であり続ける
VISIONに共感できる仲間募集中。
注意
• 個人の見解・解釈が多分に入っています。
• 見解の相違・事実誤認などありましたらご指摘ください。
• #dotnetlabでtweetすると右側に表示されます
今日の目的
• Entity Framework(Core)について触ったことない方、これか
ら使っていこうという方向けに概要を説明したい
• Entity Framework CoreでCRUDができるようになる
主なトピック
• いにしえの重厚なEntity Frameworkを見てみよう!
• Entity Framework CoreでCRUDしてみよう!
• Code-Firstとは? DB-Firstとは?
Entity Framework(Core)とは?
• Entity Framework Core(EF Core)は.NET用の最新のオブジェ
クトデータベースマッパー
• LINQクエリ、変更の追跡、更新、スキーマの移行がサポート
• EF CoreはSQL ServerやCosmosDB、MySQL、Oracle、
PostgreSQLなど多くのデータベースと連携
• Entity Framework6は.NET Framework向けに設計されたオブ
ジェクトリレーショナルマッパー
• .NET Coreもサポートしている
どちらを使ったら?
• .NETベースの新規開発ならEF Core
• 既存アプリケーションで進化したり新しい機能が必要になる可
能性が低い場合はEF6を引き続き使用
• EF Coreでのみ使用できる新機能を必要とする場合はEF Core
に移植
Entity FrameworkでCRUD
• https://sakurug.connpass.com/event/138370/
こちらのハンズオンの手
順を振り返ってみよう
手順概要
• ASP.NET MVC 個別の認証でプロジェクト作成
• プロジェクトをそのまま実行しアカウント登録実施(LocalDB
にデータを投入する)
• ModelフォルダにADO.NET Entity Data Modelをデータベー
スからEF DesignerでLocalDBをデータソースに作成
• 一旦、ビルドする
• Controllerフォルダに新規スキャフォルディングアイテムを追
加(Entity Frameworkを使用したビューがあるMVC5コント
ローラ)
Entity Frameworkの特徴
✓ EF Designerがある
✓ データベースからモデルを作成するVSウィザードがある
Entity Framework Coreの特徴
• CosmosDBなど新しいデータベースに対応
• Null許容参照型に対応
• 何よりも、積極的に改善が続けれられている!
主な対応データベース
Nugetパッケージ サポートされて
るDBエンジン
メンテナンス ビルドバージョン
Microsoft.EntityFrameworkCore.SqlServer SQL Server 2012以降 EF Coreプロジェクト 6.0
Microsoft.EntityFrameworkCore.Sqlite SQLite3.7以降 EF Coreプロジェクト 6.0
Microsoft.EntityFrameworkCore.InMemory EF Core InMemoryデータ
ベース
EF Coreプロジェクト 6.0
Microsoft.EntityFrameworkCore.Cosmos Azure CosmosDB SQLAPI EF Coreプロジェクト 6.0
Npgsql.EntityFrameworkCore.PostgreSQL PostgreSQL Npgsql開発プロジェクト 6.0
Pomelo.EntityFrameworkCore.MySql MySQL,MariaDB Pomelo Foundationプロジェクト 6.0
MySql.EntityFrameworkCore.MySql MySQL MySQLプロジェクト(Oracle) 6.0
Oracle.EntityFrameworkCore OracleDB 11.2以降 Oracle 6.0
Code Firstとは?
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
…
}
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Post> Posts { get; } = new List<Post>();
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int? BlogId { get; set; }
public Blog Blog { get; set; }
}
テーブル作成
データベースの作成
.NET Core CLI Visual Studio
データモデルの移行を
作成
dotnet ef migrations add [移行
名]
Add-Migration [移行名]
データベースにスキー
マを作成
dotnet ef database update Update-Database
DB Firstとは?
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
…
}
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Post> Posts { get; } = new List<Post>();
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int? BlogId { get; set; }
public Blog Blog { get; set; }
}
既存テーブル
モデルの作成
前提:Microsoft.EntityFrameworkCore.Designパッケージを追加でNuget
dotnet ef dbcontext scaffold "Data Source=(localdb)¥MSSQLLocalDB;Initial Catalog=Chinook" Microsoft.EntityFrameworkCore.SqlServer
.NET Core CLI
Scaffold-DbContext 'Data Source=(localdb)¥MSSQLLocalDB;Initial Catalog=Chinook' Microsoft.EntityFrameworkCore.SqlServer
Visual Studio
接続文字列 プロバイダ名
選択の方法
• LINQを使用してデータベースに問い合わせます
• EF CoreがLINQクエリの表現をデータベース固有のクエリ言
語(SQLなど)に変換して問い合わせをします。
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Where(b => b.Url.Contains("dotnet"))
.ToList();
}
挿入の方法
• データベースに新しいデータを追加するにはDbSet.Addメソッ
ドを使用します。
• SaveChangesメソッドが呼び出されたときにデータベースに
挿入されます。
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
context.SaveChanges();
}
更新の方法
• データベースから読み込まれたエンティティを変更します。
• SaveChangesメソッドを呼び出します。
using (var context = new BloggingContext())
{
var blog = context.Blogs.Where(x => x.Url == “http://example.com”).Single();
blog.Url = "http://example.com/blog";
context.SaveChanges();
}
削除の方法
• データを削除するにはDbSet.Removeメソッドを使用します。
using (var context = new BloggingContext())
{
var blog = context.Blogs.Where(x => x.Url == “http://example.com/blog”).Single();
context.Blogs.Remove(blog);
context.SaveChanges();
}
発行されたSQLを見るためには
• DbContext.OnConfiguringのオーバライドで
optionsBuilder.LogToメソッドを使用する。
• 例えば、コンソールに出力する例
• SQLだけではなくEFによる操作が出力される
• ロガーカテゴリを構成することによりSQLのみを出力することも可
能
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.LogTo(Console.WriteLine);
https://docs.microsoft.com/ja-jp/ef/core/logging-events-diagnostics/simple-logging
おしまい
おしまい

More Related Content

What's hot (20)

PDF
Docker Compose 徹底解説
Masahito Zembutsu
 
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
 
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
 
PPTX
MLflowで学ぶMLOpsことはじめ
Kenichi Sonoda
 
PDF
Laravelを用いたゲームサーバーのチューニング
NOW PRODUCTION
 
PPTX
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
 
PDF
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
PDF
BuildKitの概要と最近の機能
Kohei Tokunaga
 
PDF
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
 
PPTX
Redisの特徴と活用方法について
Yuji Otani
 
PDF
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
PPTX
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
PDF
Dockerイメージ管理の内部構造
Etsuji Nakai
 
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
PPT
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
 
PDF
マイクロサービス 4つの分割アプローチ
増田 亨
 
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
 
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
Docker Compose 徹底解説
Masahito Zembutsu
 
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
 
MLflowで学ぶMLOpsことはじめ
Kenichi Sonoda
 
Laravelを用いたゲームサーバーのチューニング
NOW PRODUCTION
 
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
 
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
BuildKitの概要と最近の機能
Kohei Tokunaga
 
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
 
Redisの特徴と活用方法について
Yuji Otani
 
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
Dockerイメージ管理の内部構造
Etsuji Nakai
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
 
マイクロサービス 4つの分割アプローチ
増田 亨
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 

Similar to Entity Framework(Core)についての概要を学ぼう (20)

PPTX
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Masaki Takeda
 
PDF
Vsug ef
Microsoft
 
PPTX
Entity Framework 5.0 deep dive
Atsushi Fukui
 
PDF
Daisukei vsug ef
vsug_jim
 
PDF
Entity Framework
Nakashima Yujiro
 
PPTX
Community Open Day 2013 JP - EF CodeFirst DEMO
okumar savurou
 
PDF
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Shotaro Suzuki
 
PDF
Mvc conf session_4_ono
Hiroshi Okunushi
 
PPTX
20110607
小野 修司
 
PDF
DeclarativeSql
Takaaki Suzuki
 
PPTX
DDDモデリング勉強会 #6
株式会社Jurabi
 
PDF
ADO.NET Entity Framework
Microsoft
 
PPTX
The seminar of asp.net at 201908 sakurug
SAKURUG co.
 
PDF
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
Atsushi Fukui
 
PDF
金魚本読書ノート JPA編
Kazuyoshi Kamitsukasa
 
PPTX
Implementing Domain-Driven Design: Part 1
Atsushi Kambara
 
PDF
Core Data の概要と NSIncrementalStore
Tetsuya Kaneuchi
 
PPT
わんくま東京#43 「いろいろしゃべります」
Takeshi Kiriya
 
PPTX
コーディング不要! Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書
Masaki Takeda
 
PDF
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
 
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Masaki Takeda
 
Vsug ef
Microsoft
 
Entity Framework 5.0 deep dive
Atsushi Fukui
 
Daisukei vsug ef
vsug_jim
 
Entity Framework
Nakashima Yujiro
 
Community Open Day 2013 JP - EF CodeFirst DEMO
okumar savurou
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Shotaro Suzuki
 
Mvc conf session_4_ono
Hiroshi Okunushi
 
20110607
小野 修司
 
DeclarativeSql
Takaaki Suzuki
 
DDDモデリング勉強会 #6
株式会社Jurabi
 
ADO.NET Entity Framework
Microsoft
 
The seminar of asp.net at 201908 sakurug
SAKURUG co.
 
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
Atsushi Fukui
 
金魚本読書ノート JPA編
Kazuyoshi Kamitsukasa
 
Implementing Domain-Driven Design: Part 1
Atsushi Kambara
 
Core Data の概要と NSIncrementalStore
Tetsuya Kaneuchi
 
わんくま東京#43 「いろいろしゃべります」
Takeshi Kiriya
 
コーディング不要! Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書
Masaki Takeda
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
 
Ad

More from TomomitsuKusaba (18)

PDF
.NET 7におけるBlazorの新機能
TomomitsuKusaba
 
PDF
ASP. NET Core 汎用ホスト概要
TomomitsuKusaba
 
PDF
Web開発者にお勧め .NET MAUI Blazor App
TomomitsuKusaba
 
PDF
Microsoft MVPとは?コミュニティ活動のすすめ
TomomitsuKusaba
 
PDF
.NET 7期待の新機能
TomomitsuKusaba
 
PDF
NET 6で実装された新しいLINQ API
TomomitsuKusaba
 
PDF
.NET6新機能の振り返り
TomomitsuKusaba
 
PDF
Web開発者が始める .NET MAUI Blazor App
TomomitsuKusaba
 
PDF
BlazorにSwaggerを導入してみよう
TomomitsuKusaba
 
PDF
MuseLoid規格の音源自作について
TomomitsuKusaba
 
PDF
.NET Lab2022年2月
TomomitsuKusaba
 
PDF
保守性の高いアプリケーション設計について
TomomitsuKusaba
 
PDF
リモートワークで買ってよかったもの
TomomitsuKusaba
 
PDF
Static Web AppsとBlazor WebAssemblyのすすめ
TomomitsuKusaba
 
PDF
.NET 6の期待の新機能とアップデート
TomomitsuKusaba
 
PPTX
.NETラボ2021年10月 .NETの過去と現在
TomomitsuKusaba
 
PPTX
.NETラボ2021年9月 Blazorのカスタム認証を通じてDIの便利さを学ぶ
TomomitsuKusaba
 
PPTX
.Netlab202107
TomomitsuKusaba
 
.NET 7におけるBlazorの新機能
TomomitsuKusaba
 
ASP. NET Core 汎用ホスト概要
TomomitsuKusaba
 
Web開発者にお勧め .NET MAUI Blazor App
TomomitsuKusaba
 
Microsoft MVPとは?コミュニティ活動のすすめ
TomomitsuKusaba
 
.NET 7期待の新機能
TomomitsuKusaba
 
NET 6で実装された新しいLINQ API
TomomitsuKusaba
 
.NET6新機能の振り返り
TomomitsuKusaba
 
Web開発者が始める .NET MAUI Blazor App
TomomitsuKusaba
 
BlazorにSwaggerを導入してみよう
TomomitsuKusaba
 
MuseLoid規格の音源自作について
TomomitsuKusaba
 
.NET Lab2022年2月
TomomitsuKusaba
 
保守性の高いアプリケーション設計について
TomomitsuKusaba
 
リモートワークで買ってよかったもの
TomomitsuKusaba
 
Static Web AppsとBlazor WebAssemblyのすすめ
TomomitsuKusaba
 
.NET 6の期待の新機能とアップデート
TomomitsuKusaba
 
.NETラボ2021年10月 .NETの過去と現在
TomomitsuKusaba
 
.NETラボ2021年9月 Blazorのカスタム認証を通じてDIの便利さを学ぶ
TomomitsuKusaba
 
.Netlab202107
TomomitsuKusaba
 
Ad

Entity Framework(Core)についての概要を学ぼう