Daisukei vsug ef
Transcript of Daisukei vsug ef
ADO.NET Entity Framework
歴史と最新情報
井上大輔
日本マイクロソフト株式会社
VSUG DAY 2012 Winter (2012.12.15)
VSUG DAY 2012 Winter 2012.12.15
はじめに
• ゴール ADO.NET Entity Framework を使う上でのポイントを理解してください
• Level 300 くらい 初心者向けではありません
• デモはコンソールアプリばかりです 見た目にこだわりません
VSUG DAY 2012 Winter 2012.12.15
Agenda
VSUG DAY 2012 Winter 2012.12.15
ADO.NET Entity Framework の今
VSUG DAY 2012 Winter 2012.12.15
現在、主要なデータアクセステクノロジーの選択肢
.NET Framework ADO.NET DataSet
LINQ to SQL
ADO.NET Entity Framework(EF)
VSUG DAY 2012 Winter 2012.12.15
各テクノジーの比較(ザックリと・・・)
N 階層
システム
マルチ
DB 対応 チューニング
データモデルの柔軟性
開発生産性
・保守性
将来性 総じて言えば・・・
ADO.NE
T
DataSet
○ △ ○ △ △ 成熟 機能的にも成熟、情報も豊富。細かいチューニングが必要な業務アプリなどで有効。
LINQ to
SQL
△ × △ △ △ 大きな進化はなし
基本はEFを使えないか検討すべき。マイグレーションツールもあり。
EF ○ ○ △ ○ ○ 進化を継
続 生産性・保守性が高く、アジャイルな開発現場で有効。Webなどライトなアプリ開発に便利。
相対的に良い
ことが多い
相対的に細部まで制御出来る
概念モデル
を定義
SQL Server
に特化 相対的に速度は低
VSUG DAY 2012 Winter 2012.12.15
ご参考
Oracle Data Provider for
.NET Devart MySQL
Connector/NET
Progress DataDirect Connect
VistaDB OpenLink Software
IBM (DB2, Informix, U2)
Sybase SQL Anywhere
Sybase Adaptive Server
Enterprise
Phoenix Software Solutions
SQL Compact Synergex
EF Supports Multiple Databases - www.tinyurl.com/efproviders
VSUG DAY 2012 Winter 2012.12.15
EF の進化
EF 1 •Included in.NET 3.5/VS 2008 SP1
•Database First
•Basic O/RM support
EF 4 •Included in .NET 4/VS 2010
•POCO
•Lazy Loading
•FKs
•Testability
•Model First
•Customizable T4 Code-Gen
•N-Tier
EF 4.1, 4.2 •Out of band release
•Available on NuGet
•Builds on .NET 4
•Code First
•Simplified DbContext API
•Semantic Versioning
EF 4.3 •Out of band release
•Available on NuGet
•Builds on .NET 4
•Code First Migrations
•Improved Database Generation
•Code First & DbContext bug fixes
EF 5 ・Out of band release
・Available on NuGet
・Builds on .NET 4
・Code First Migrations
・Improved Database Generation
・Code First & DbContext bug fixes
2008/08 2012/08
VSUG DAY 2012 Winter 2012.12.15
EF 1
インピーダンス ミスマッチ問題の解決
Database First
基本的な O/R マッパー
プレゼンテーション層
ドメイン層
データ層
EF
RDB
VSUG DAY 2012 Winter 2012.12.15
EF 4
ドメイン駆動、N 階層システムの開発を
意識した機能強化
Model First EDM から DB オブジェクトを生成
【概念モデル】-> 【論理モデル】の流れで開発が出来る
Persistence Ignorance(PI) POCO(Plain-Old CLR Object)
永続化技術(EFなど)に依存しない実装が可能
他の技術への変更が容易になった
Change Tracking 自己追跡エンティティ(DataSet の DiffGram に相当)
変更(CUD)履歴をエンティティが管理
階層を跨ったエンティティの CRUD が容易になった
プレゼンテーション層
ドメイン層
データ層
EF
RDB
VSUG DAY 2012 Winter 2012.12.15
DEMO
VSUG DAY 2012 Winter 2012.12.15
EF 4.1, 4.2
より迅速な開発を意識した機能強化
Code First コードから DB や DB オブジェクトを生成
テスト駆動開発やアジャイルな開発、
プロトタイプの開発に有効
特に MVC などライトな Web アプリ開発に有効
特徴
• POCO ベースのエンティティ
• CoC(Convention over Configuration)
「規約は設定に勝る」がベースの開発
プレゼンテーション層
ドメイン層
データ層
EF public partial class Entry
{
public virtual int ID
{
get;
set;
}
RDB
VSUG DAY 2012 Winter 2012.12.15
DEMO
VSUG DAY 2012 Winter 2012.12.15
CoC(Convention over Configuration)
「規約は設定に勝る」をベースにした実装 クラス(単数形)は、同名のテーブル(複数形)にマッピングされる。
プロパティは、同名のテーブル列にマッピングされる 。
主キーは、Id、または<クラス名>Idという名前がデフォルトになる。
など
規約から逸脱する部分
Annotation (System.ComponentModel.DataAnnotations)
• エンティティのプロパティに属性を指定
• Key、StringLength、ConcurrencyCheck、Required、Timestamp、DataMember、RelatedTo、MaxLength、StoreGenerated など多数
Fluent API (System.Data.Entity.DbModelBuilder)
• エンティティ外部から指定(つまりエンティティ自体は POCO で実装可能)
VSUG DAY 2012 Winter 2012.12.15
DEMO
VSUG DAY 2012 Winter 2012.12.15
Entity Framework 4.3
機能強化とバグフィックス
Code First Migration スキーマを更新した時のデータ移行に対応
bug fixes GetDatabaseValues のバグ修正
DbSet の名前に Unicode が使えなかったバグ修正
VSUG DAY 2012 Winter 2012.12.15
Code First Migration
Automatic Migration 自動マイグレーション
自動化の対象
• プロパティやクラスの追加
• プロパティやクラス名称の変更
• プロパティやクラスの名称変更をせずに、カラムやテーブル名称の変更
• プロパティの削除
Code-Based Migration 任意のタイミングでマイグレーション
データの投入、インデックス、ユニーク、デフォルト値の指定など細かい制御が可能
VSUG DAY 2012 Winter 2012.12.15
Code First Migration
初期化(IDatabaseInitializer)の実装クラスの追加 CreateDatabaseIfNotExists(Of TContext)
DropCreateDatabaseAlways(Of TContext)
DropCreateDatabaseIfModelChanges(Of TContext)
コマンド Enable-Migrations / Add-Migration(Code-Base migration) / Update-Database
VSUG DAY 2012 Winter 2012.12.15
DEMO
VSUG DAY 2012 Winter 2012.12.15
EF 5
追加機能
Enum
Spatial types (Geography / Geometry)
デザイナの改善
Table-Valued Functions
パフォーマンスの向上
Automatic query caching for LINQ
LINQ parameter evaluation optimization
Table-Per-Type query optimization
Large model improvements
マルチダイアグラム
enum
ストアドプロシージャと 関数のバッチインポートハイライトとカラーリング
VSUG DAY 2012 Winter 2012.12.15
EF 4.0 と比べ 600% 近く性能が向上
0%
500%
1000%
1500%
2000%
2500%
Handcoded ADO.NET
EF Raw SQL EF Compiled Query Entity SQL LINQ to Entities LINQ to SQL
.NET 4.0 100% 199% 262% 1518% 2314% 1650%
.NET 4.5 100% 211% 269% 406% 412% 1350%
Tim
e s
pe
nt
Performance in warm execution of query based on key
VSUG DAY 2012 Winter 2012.12.15
DEMO
VSUG DAY 2012 Winter 2012.12.15
各開発手法の比較(ザックリと・・・)
アプローチ DB 機能(SP、ビュー、など)のフル活用
チューニング 開発、修正の容易性
総じて言えば・・・
Database
First
リレーショナルモデルを先に開発
○ ○ △ リレーショナルモデルがある程度決まっていれば DB 機
能がフルに活用できるので便利
Model
First 概念モデルを先に開発
△ △ △ 概念モデルがある程度決まっていれば DB を意識しない開発ができるので便利。
学術的には正しいが現場で使えるかは検証が必要。
Code
First コードから先に開発
△ △ ○ モデルが固まってない段階から俊敏に開発していく際に便利
- テストファースト
- アジャイルな開発
- プロトタイプの開発
相対的にDBの機能を多く使える
※ 結構、好みが大きいかも・・
相対的に
1番面倒
VSUG DAY 2012 Winter 2012.12.15
ADO.NET Entity Framework
の未来
VSUG DAY 2012 Winter 2012.12.15
Apache 2.0 License
Code first custom conventions
非同期処理
• SaveChangesAsync(), ExecuteSqlCommandAsync(),
FindAsync(), SingleAsync(), ToListAsync()
Code First の ストアドプロシージャ対応(未)
Connection Resiliency (Retry) (未)
など多数の機能追加を予定
EF6 alpha 2
VSUG DAY 2012 Winter 2012.12.15
DEMO
VSUG DAY 2012 Winter 2012.12.15
要求、キュー、スレッド
Web サーバー (IIS)
要求 (Request)
キュー (Queue)
キュー (Queue) に入った要求 (Request) は、ユーザー (クライアント) からは、処理中の要求(Request) と同じように見えます
要求とスレッドは、1 対 1 の関係ではありません。1 つのスレッドが、複数の要求を同時に処理することもあります
処理中 …
処理中 …
処理中 …
スレッド (Thread)
スレッド プール
VSUG DAY 2012 Winter 2012.12.15
同期処理
スレッド
プール
要求
スレッドが空くのを待機 . . .
スレッド
I/O 処理を待機 (ネットワーク接続, ファイル接続, など)
VSUG DAY 2012 Winter 2012.12.15
非同期処理
スレッド
プール
要求
スレッドの有効活用による、
高スループット、高スケーラブルな処理の実現
VSUG DAY 2012 Winter 2012.12.15
EF Power Tools Beta 2
既存 DB スキーマから
Code First のクラスを自動生成
Visual Studio の拡張機能として提供
VSUG DAY 2012 Winter 2012.12.15
DEMO
VSUG DAY 2012 Winter 2012.12.15
Entity Framework のバージョンと機能
EF 1.0 EF 4.0 EF 4.1, 4.2 EF 4.3 EF 5.0 EF 6.0
Alpah
Provider Model
.NET 3.5 SP1 .NET 4.0 .NET 4.0 .NET 4.0 .NET 4.5 .NET 4.5
EntityClient
MetadataWorkspace
ObjectContext
EntityDataSource
Entity Designer
VS 2008
SP1 VS 2010 VS 2010 VS 2010 VS2012 VS 2012
DbContext Template VS Gallery VS Gallery VS Gallery VS Gallery
DbContext NuGet
NuGet NuGet NuGet Code First
Migrations
.NET/VS releases OOB releases
※EF 5 will work with Visual Studio 2010
VSUG DAY 2012 Winter 2012.12.15
まとめ
• 要件に応じた適切な選択肢を選択
–テクノロジー:EF, ADO.NET DataSet, LINQ to SQL
–開発手法:DB First, Model First, Code First
• EF は進化を継続
– EF1 → EF4 → EF5 … EF6……
VSUG DAY 2012 Winter 2012.12.15
Appendix
VSUG DAY 2012 Winter 2012.12.15
各テクノジーの比較
N階層
システム
マルチ
DB対応
異なるプラットフォーム間連携
チューニング データモデルの柔軟性
開発生産性
・保守性 将来性 総じて言えば・・・
ADO.NE
T
DataSet
○ △ △ ○ △ △ 成熟 機能的にも成熟、情報も豊富。細かいチューニングが必要な業務アプリなどで有効。
LINQ to
SQL
△ × △ △ △ △ 大きな進化はなし
基本はEFを使えないか検
討すべき。マイグレーションツールもあり。
EF
○ ○ ○ △ ○ ○ 進化を継続
生産性・保守性が高くアジャイルな開発現場で有効。Webなどライトなアプリ開発に便利。
相対的に良い
ことが多い
相対的に細部
まで制御出来る
POCOを採用 EDMを採用
SQL Server
に特化 相対的に
パフォーマンス低
VSUG DAY 2012 Winter 2012.12.15
Developer ワークフロー
Database First • DB からモデルを自動生成 • DB からクラスを自動生成
Model First • デザイナによるモデル( .edmx )の作成
• モデルからクラスの自動生成 • モデルから DB の作成
Code First • コードでモデルを定義
(Reverse engineer tools available)
Code First • コードでモデルを定義 • ランタイムに DB を自動生成
Designer Centric Code Centric