Entity Framework V2 として知られるEntity Framework 4.0ベータ1が.NET 4.0ベータ1とともに配布された。本バージョンでは、次のような重要な改良が含まれている。コード生成のカスタマイズ、遅延読み込み、N階層サポート、POCOサポート、DDL生成、クエリのカスタマイズなど
EF 4.0の主な改善点の紹介では、次のように書かれている。
- コード生成のカスタマイズ – 開発者がコード生成をコントロールできるようにADO.NET Entity FrameworkデザイナとVisual StudioのT4テンプレートを統合しました。
- アプリケーションの開発をシンプルにするちょっとしたこと– モデルで複数形と単数形の追加、遅延読み込み、そしてストアドプロシージャとのマッピングでEntity Frameworkを使ったアプリケーションを開発するのが簡単になります。
- クエリのカスタマイズ – 既存のLINQ操作のサポート、より大きなパターンの認識、モデルで定義したファンクションをLINQで使用する機能、クエリ作成とカスタマイズを行うためのいくつかの方法を追加しました。
- SQL 生成の可読性の向上 – 可読性の向上、TSQLパフォーマンス最適化、生成されたクエリでなにが起きたかを理解することが容易になりました。
EF 4.0の改良点の詳細をいくつか解説する。
N階層開発
N階層開発におけるひとつの重要な一面は、エンティティの状態をクライアントとサーバーの間で交換する能力である。ADO.NET Entity FrameworkのプログラムマネージャであるDiego Vega氏は、さらに詳しく述べている。
本当に必要なものは
- 状態が変更されたと推測されると非接続のグラフに適用される必要があります。
- それらの変更を永続化レイヤに伝達します。
これを助けるためにEF 4.0には、以下のAPI呼び出しが含まれている。
- ObjectContext.ApplyOriginalValues
- ObjectStateManager.ChangeObjectState
- ObjectStateManager.ChangeRelationshipsState
加えて、EFには低レベルAPIがである自己追跡エンティティ(self-tracking entities)が含まれている。
自己追跡エンティティはどの層で変更されても、それら自身が変更をトラッキングするためにどうするかを知っています。自己追跡エンティティは、DTOとDataSetのそれぞれのベネフィットを含んでいます。
ADO.NETチームは、ObjectContextに対するクラスと拡張メソッドを生成するためにT4テンプレート(ベータ版には含まれていない)を利用しようとしている。
モデルファースト
Visual Studio 2010は、DDLとエンティティデータモデルをストアするためのデータベースを生成 することができる。開発者は、DDLのカスタマイズ、要求するデータベースの選択、マッピング処理の微調整を通じてすべてのプロセスを完全にコントロールすることができる。
遅延読み込み
EF 4.0における関連するエンティティの先延ばし/遅延読み込みは、デフォルトでContextOptions.DeferredLoadingEnabledプロパティをtrueにすることでサポートしている。遅延読み込みは、POCOと同じようにコード生成されたエンティティで動作している。遅延読み込みは、デフォルトでオフにされているが、この設定はカスタマイズ可能である。
POCOのサポート
.NET 3.5のEFオブジェクトは、EntityObjectを継承するか、IEntityWithKey, IEntityWithChangeTracker andIEntityWithRelationshipsのいずれかのインターフェイスを実装する必要があった。それは、永続レイヤを強く意識するため、ドメインモデルを台無しにしていた。EF 4.0ではこれらの制限が取り除かれて、完全に透過された永続化が可能になった。