.NET > Code First Programming Model


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

EntityFrameworks4(以降、EF4)はVS2010と共にリリースされ、POCOエンティティやモデルファーストなどの開発手法が取り入れられた先進的で斬新なアップデートとなりましたが、CTP4にはさらにコードファーストによるEntityFrameworkの新しい開発アプローチが提供されました。
(EF4はCTP4からCTP5にバージョンアップしました(ReleaseNote)

コードファースト

コードファーストからのアプローチで永続化エンティティを扱う開発手法は、既存の開発手法を駆逐するようなものではありません。 実際の開発現場に於いて、コードファーストを使用して開発を行うケースは限られており、次のコードファーストが持つ特徴が開発現場の生産性とのトレードオフとマッチした場合に非常に斬新なアプローチとして取り入れることができるかもしれません。

  • PlainOldなクラスをデータモデルクラスに使用できる(POCOと同じ)
  • CoC(convention over configuration) (Wikipedia:設定より規約)
  • IDEが持つデザイナやXMLによる、マッピング記述が不必要

特にCoCでエンティティの永続化を実現できる点が、開発生産性の向上に大きく貢献しています。 *1
多くの規約によりエンティティとオブジェクトとのマッピングはソースコード上に特別な記述なしに設定されます *2

EF4.1

EntityFrameworkのバージョン4.1です。

主キーの作成をデータベースが自動的につくることができるなどのオプションが追加されました。

EF4 CTP5

Microsoft ADO.NET Entity Framework Feature Community Technology Preview 5

CTP4からバージョンアップされCTP5となりました。
変更点がいくつかあるため、CTP4のコードをそのままCTP5でコンパイルできなくなっています。

  • アセンブリ名に変更があります。
  • コードファーストでのデータベース構造の初期化コードがより良いものになっています
  • コードファーストにおいて、既存のデータベースからEdmMetadataテーブルを除外してマッピングを行います。
  • クラス名に変更があります
  • DbSetがObservableCollection型のコレクションを返すことができるようになりました。
    WPFのListItem系のコントロール(ListControlやListView、DataGridなど)のItemsSourceにバインディングすることができます。

CTP5のプロジェクト

EF4 CTP4

CTP4はMicrosoft ADO.NET Entity Framework Feature Community Technology Preview 4 からダウンロードできます。
セットアップファイルでの配布ですが、セットアップには「Microsoft.Data.Entity.CTP.DLL」しか含まれていません。(Project Filesフォルダに放り込まれるので、このDLLを直接参照するか、参照したいプロジェクトにコピーして参照して使用する)

CTP4に含まれている名前空間は次の通り。

  • System.ComponentModel.DataAnnotations
  • System.Data.Entity
  • System.Data.Entity.Infrastructure
  • System.Data.Entity.ModelConfiguration

余談ですが、System.Data.Entity.DLLにはSystem.Data.Entityという名前空間は含まれていません。

CTP4のプロジェクト

コードファーストによるアプローチの結論

すべてコードによってモデルの設計からデータベースへのマッピングまで行えるため、コードファーストによるアプローチでのエンティティ永続化は非常に使いやすいことがわかります。バックグラウンドにSQLCEを使用することで、外部にサーバーを用意したり、エンドユーザーにデータベースを稼働させる必要もなくなります。

さらに、SQLCEを使うことでオブジェクトのシリアライズデータをバイナリファイルで保存するより確実にデータの永続化が実現できます。

パフォーマンスについてはそれほどよくはありません。といっても、すでに埋め込み型データベースの地位を確立したSQLiteと同じかそれ以上のパフォーマンスは発揮できます。
もちろん、サーバーデーモン型データベースサーバーであるのSQLServerやMySQLやPostgreSQLを使用するよりもパフォーマンスは圧倒的に落ちますし、機能もかなり限定的です。(SQLiteやSQLCEにはストアドプロシージャをはじめとするおおくの機能が実装されていない)

「コードファースト手法+EF4+SQL Server Compact Edition」の組み合わせは、小規模な商用ソフトやツールなどで使用する分には最高の生産性を提供できると思われます。

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集