daisukei vsug ef

36
ADO.NET Entity Framework 歴史と最新情報 井上大輔 日本マイクロソフト株式会社 VSUG DAY 2012 Winter 2012.12.15

Upload: vsugjim

Post on 28-May-2015

615 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Daisukei vsug ef

ADO.NET Entity Framework

歴史と最新情報

井上大輔

日本マイクロソフト株式会社

VSUG DAY 2012 Winter (2012.12.15)

Page 2: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

はじめに

• ゴール ADO.NET Entity Framework を使う上でのポイントを理解してください

• Level 300 くらい 初心者向けではありません

• デモはコンソールアプリばかりです 見た目にこだわりません

Page 3: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

Agenda

Page 4: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

ADO.NET Entity Framework の今

Page 5: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

現在、主要なデータアクセステクノロジーの選択肢

.NET Framework ADO.NET DataSet

LINQ to SQL

ADO.NET Entity Framework(EF)

Page 6: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

各テクノジーの比較(ザックリと・・・)

N 階層

システム

マルチ

DB 対応 チューニング

データモデルの柔軟性

開発生産性

・保守性

将来性 総じて言えば・・・

ADO.NE

T

DataSet

○ △ ○ △ △ 成熟 機能的にも成熟、情報も豊富。細かいチューニングが必要な業務アプリなどで有効。

LINQ to

SQL

△ × △ △ △ 大きな進化はなし

基本はEFを使えないか検討すべき。マイグレーションツールもあり。

EF ○ ○ △ ○ ○ 進化を継

続 生産性・保守性が高く、アジャイルな開発現場で有効。Webなどライトなアプリ開発に便利。

相対的に良い

ことが多い

相対的に細部まで制御出来る

概念モデル

を定義

SQL Server

に特化 相対的に速度は低

Page 7: Daisukei vsug ef

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

Page 8: Daisukei vsug ef

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

Page 9: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

EF 1

インピーダンス ミスマッチ問題の解決

Database First

基本的な O/R マッパー

プレゼンテーション層

ドメイン層

データ層

EF

RDB

Page 10: Daisukei vsug ef

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

Page 11: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

DEMO

Page 12: Daisukei vsug ef

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

Page 13: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

DEMO

Page 14: Daisukei vsug ef

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 で実装可能)

Page 15: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

DEMO

Page 16: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

Entity Framework 4.3

機能強化とバグフィックス

Code First Migration スキーマを更新した時のデータ移行に対応

bug fixes GetDatabaseValues のバグ修正

DbSet の名前に Unicode が使えなかったバグ修正

Page 17: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

Code First Migration

Automatic Migration 自動マイグレーション

自動化の対象

• プロパティやクラスの追加

• プロパティやクラス名称の変更

• プロパティやクラスの名称変更をせずに、カラムやテーブル名称の変更

• プロパティの削除

Code-Based Migration 任意のタイミングでマイグレーション

データの投入、インデックス、ユニーク、デフォルト値の指定など細かい制御が可能

Page 18: Daisukei vsug ef

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

Page 19: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

DEMO

Page 20: Daisukei vsug ef

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

ストアドプロシージャと 関数のバッチインポートハイライトとカラーリング

Page 21: Daisukei vsug ef

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

Page 22: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

DEMO

Page 23: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

各開発手法の比較(ザックリと・・・)

アプローチ DB 機能(SP、ビュー、など)のフル活用

チューニング 開発、修正の容易性

総じて言えば・・・

Database

First

リレーショナルモデルを先に開発

○ ○ △ リレーショナルモデルがある程度決まっていれば DB 機

能がフルに活用できるので便利

Model

First 概念モデルを先に開発

△ △ △ 概念モデルがある程度決まっていれば DB を意識しない開発ができるので便利。

学術的には正しいが現場で使えるかは検証が必要。

Code

First コードから先に開発

△ △ ○ モデルが固まってない段階から俊敏に開発していく際に便利

- テストファースト

- アジャイルな開発

- プロトタイプの開発

相対的にDBの機能を多く使える

※ 結構、好みが大きいかも・・

相対的に

1番面倒

Page 24: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

ADO.NET Entity Framework

の未来

Page 25: Daisukei vsug ef

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

Page 26: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

DEMO

Page 27: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

要求、キュー、スレッド

Web サーバー (IIS)

要求 (Request)

キュー (Queue)

キュー (Queue) に入った要求 (Request) は、ユーザー (クライアント) からは、処理中の要求(Request) と同じように見えます

要求とスレッドは、1 対 1 の関係ではありません。1 つのスレッドが、複数の要求を同時に処理することもあります

処理中 …

処理中 …

処理中 …

スレッド (Thread)

スレッド プール

Page 28: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

同期処理

スレッド

プール

要求

スレッドが空くのを待機 . . .

スレッド

I/O 処理を待機 (ネットワーク接続, ファイル接続, など)

Page 29: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

非同期処理

スレッド

プール

要求

スレッドの有効活用による、

高スループット、高スケーラブルな処理の実現

Page 30: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

EF Power Tools Beta 2

既存 DB スキーマから

Code First のクラスを自動生成

Visual Studio の拡張機能として提供

Page 31: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

DEMO

Page 32: Daisukei vsug ef

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

Page 33: Daisukei vsug ef

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……

Page 34: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

Appendix

Page 35: Daisukei vsug ef

VSUG DAY 2012 Winter 2012.12.15

各テクノジーの比較

N階層

システム

マルチ

DB対応

異なるプラットフォーム間連携

チューニング データモデルの柔軟性

開発生産性

・保守性 将来性 総じて言えば・・・

ADO.NE

T

DataSet

○ △ △ ○ △ △ 成熟 機能的にも成熟、情報も豊富。細かいチューニングが必要な業務アプリなどで有効。

LINQ to

SQL

△ × △ △ △ △ 大きな進化はなし

基本はEFを使えないか検

討すべき。マイグレーションツールもあり。

EF

○ ○ ○ △ ○ ○ 進化を継続

生産性・保守性が高くアジャイルな開発現場で有効。Webなどライトなアプリ開発に便利。

相対的に良い

ことが多い

相対的に細部

まで制御出来る

POCOを採用 EDMを採用

SQL Server

に特化 相対的に

パフォーマンス低

Page 36: Daisukei vsug ef

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