次の方法で共有


移行に関する注意事項 (Entity Framework)

ADO.NET Entity Framework には、既存のアプリケーションにとっていくつかの利点があります。中でも最も重要なものの 1 つが、エンティティ データ モデル (EDM) を使用して、アプリケーションで使用するデータ構造をデータ ソースのスキーマから分離できることです。これにより、ストレージ モデルやデータ ソース自体の将来の変更が容易になり、その変更を補うための変更をアプリケーションに加える必要がなくなります。エンティティ フレームワーク を使用する利点の詳細については、「Entity Framework の概要」を参照してください。

エンティティ フレームワーク の利点を活用するために既存のアプリケーションを エンティティ フレームワーク に移行することができます。移行作業の一部はすべてのアプリケーションに共通です。こうした共通の作業には、.NET Framework Version 3.5 Service Pack 1 (SP1) を使用するようにアプリケーションをアップグレードする作業のほか、EDM の定義や Entity Framework の構成などが含まれます。そのほか、アプリケーションを エンティティ フレームワーク に移行する際には、移行するアプリケーションの種類やアプリケーションの特定の機能に依存する注意点もあります。このトピックでは、既存のアプリケーションをアップグレードする際に最適な方法を選択するために役立つ情報を紹介します。

全般的な移行の注意点

アプリケーションを エンティティ フレームワーク に移行する際には次の点に注意してください。

  • .NET Framework 3.5 を使用しているアプリケーションはどれでも Entity Framework に移行できますが、アプリケーションが使用するデータ ソースのデータ プロバイダで Entity Framework がサポートされている必要があります。

  • データ ソース プロバイダが Entity Framework をサポートしていても、そのプロバイダのすべての機能が Entity Framework でサポートされるとは限りません。

  • 大規模なアプリケーションや複雑なアプリケーションの場合、アプリケーション全体を一度に Entity Framework に移行する必要はありません。ただし、Entity Framework を使用しない部分がアプリケーションにある場合、それらの部分については、データ ソースが変更された場合に変更が必要になります。

  • エンティティ フレームワーク は ADO.NET データ プロバイダを使用してデータ ソースにアクセスするため、Entity Framework が使用するデータ プロバイダ接続をアプリケーションの他の部分と共有できます (たとえば、Entity Framework は SqlClient プロバイダを使用して SQL Server データベースにアクセスします)。詳細については、「Entity Framework 用の EntityClient プロバイダ」を参照してください。

共通の移行作業

既存アプリケーションの エンティティ フレームワーク への移行パスは、アプリケーションの種類と既存のデータ アクセス計画の両方に依存します。ただし、以下の作業は、既存のアプリケーションを エンティティ フレームワーク に移行する際に常に実行する必要があります。

[!メモ]

これらの作業は、Visual Studio 2008 で Entity Data Model ツールを使用するとすべて自動的に実行されます。詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」を参照してください。

  1. アプリケーションをアップグレードします。

    以前のバージョンの Visual Studio と .NET Framework を使用して作成したプロジェクトは、Visual Studio 2008 SP1 と .NET Framework 3.5 SP1 を使用するようにアップグレードする必要があります。詳細については、「Visual Studio 変換ウィザード」を参照してください。

  2. エンティティ データ モデル (EDM) を定義します。

    EDM では、概念モデルのエンティティ、データ ソースの構造 (テーブル、ストアド プロシージャ、ビューなど)、およびエンティティとデータ ソースの構造とのマッピングを定義します。詳細については、「Entity Data Model を手動で定義する方法 (Entity Framework)」を参照してください。

    ストレージ モデルに定義されている型は、データ ソースのオブジェクトと名前が一致している必要があります。また、既存のアプリケーションでデータがオブジェクトとして公開されている場合は、概念モデルに定義するエンティティおよびプロパティの名前を既存のデータ クラスおよびプロパティの名前に一致させる必要があります。詳細については、「カスタム オブジェクトを操作できるように Entity Data Model をカスタマイズする方法 (Entity Framework)」を参照してください。

    [!メモ]

    Entity Data Model デザイナを使用すると、概念モデルのエンティティの名前を既存のオブジェクトに合わせて変更できます。詳細については、「ADO.NET Entity Data Model デザイナの概要」を参照してください。

  3. 接続文字列を定義します。

    エンティティ フレームワーク で EDM に対してクエリを実行する際には特殊な形式の接続文字列を使用します。この接続文字列には、EDM マッピング ファイルに関する情報とデータ ソースへの接続に関する情報がカプセル化されます。詳細については、「接続文字列を定義する方法 (Entity Framework)」を参照してください。

  4. Visual Studio プロジェクトを構成します。

    エンティティ フレームワーク アセンブリへの参照と EDM を Visual Studio プロジェクトに追加する必要があります。これらのマッピング ファイルをプロジェクトに追加することで、接続文字列で指定された場所にアプリケーションと共に配置されるようにすることができます。詳細については、「Entity Framework プロジェクトを手動で構成する方法」を参照してください。

既存のオブジェクトを含むアプリケーションの注意点

アプリケーションを エンティティ フレームワーク に移行する場合、既存のデータ クラスの移行方法は、そのクラスに実装されているビジネス ロジック、カスタム メソッド、およびプロパティ検証によって決まります。次の中から既存のデータ クラスの移行方法を選択してください。

  • オブジェクト プロパティの取得と設定のみを行うデータ クラスは、エンティティ データ モデル ツールによって生成されるエンティティ型に置き換えます。詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」を参照してください。

  • データ クラスにカスタム検証コードやその他のビジネス ロジックが実装されている場合は、エンティティ データ モデル ツールによって生成される部分クラスにそのロジックを移行します。エンティティ データ モデル ツールではエンティティ型が部分クラスとして生成されるため、既存のクラスを部分クラスに変換することによってメソッドとプロパティを再利用できます。その際には、生成されたクラスの重複するプロパティを既存のアプリケーションから削除する必要があります。部分クラスを作成する方法の詳細については、「オブジェクトのカスタマイズ (Entity Framework)」を参照してください。

    データ クラスの各プロパティについて、OnPropertyNameChangingOnPropertyNameChanged という部分メソッドが エンティティ フレームワーク ツールによって生成されます。既存のプロパティ検証コードをこれらの部分メソッドに移行できます。詳細については、「プロパティの変更時にビジネス ロジックを実行する方法 (Entity Framework)」を参照してください。

  • 大量のカスタム コードがあるなどの理由で既存のデータ クラスを保持したい場合は、次のいずれかの作業を行う必要があります。

    • EntityObject クラスか ComplexObject クラスを継承するようにデータ クラスを変更します。生成される EDM 型はすべて EntityObjectComplexObject を継承するため、これらの基本クラスを継承することによって エンティティ フレームワーク でカスタム データ クラスを使用できます。EDM でカスタム データ クラスを使用する場合は、この方法をお勧めします。詳細については、「オブジェクトのカスタマイズ (Entity Framework)」を参照してください。

    • データ クラスを変更して一連のインターフェイスを実装します。データ クラスで EntityObjectComplexObject を継承できない場合にこの方法を使用します。これらのインターフェイスの実装方法については、「オブジェクトのカスタマイズ (Entity Framework)」を参照してください。

[!メモ]

EDM で既存のデータ クラスや部分クラスを使用する場合は、概念モデルに定義されているエンティティ名がクラス名と一致している必要があります。エンティティの名前を変更するにはエンティティ デザイナを使用します。詳細については、「エンティティ型を作成および変更する方法」を参照してください。

ADO.NET プロバイダを使用するアプリケーションの注意点

SqlClient などの ADO.NET プロバイダを使用すると、データ ソースに対するクエリを実行して表形式のデータを取得できます。データを ADO.NET DataSet に読み込むこともできます。以下は、既存の ADO.NET プロバイダを使用するアプリケーションをアップグレードする場合の注意点です。

  • データ リーダーを使用して表形式のデータを表示している場合
    EntityClient プロバイダを使用して Entity SQL クエリを実行して、返された EntityDataReader オブジェクトを列挙処理することも考えられますが、この方法を使用するのは、データ リーダーを使用して表形式のデータを表示するアプリケーションで、データをオブジェクトに具体化したり、変更を追跡したり、更新を行ったりするための Object Services の機能が不要である場合だけにしてください。データ ソースを更新する既存のデータ アクセス コードも引き続き使用できますが、EntityConnectionStoreConnection プロパティから既存の接続にアクセスできます。詳細については、「Entity Framework 用の EntityClient プロバイダ」を参照してください。
  • DataSet を使用している場合
    エンティティ フレームワーク では、メモリへの保持、変更の追跡、データ バインド、オブジェクトの XML データとしてのシリアル化など、DataSet によって提供される機能の多くが Object Services によって提供されます。詳細については、「Object Services の概要 (Entity Framework)」を参照してください。

    アプリケーションで必要な DataSet の機能が Object Services によって提供されていない場合も、LINQ to DataSet を使用して LINQ クエリを活用することができます。詳細については、「LINQ to DataSet」を参照してください。

データをコントロールにバインドするアプリケーションの注意点

.NET Framework では、データをデータ ソース (DataSet や ASP.NET データ ソース コントロールなど) にカプセル化して、それらのデータ コントロールにユーザー インターフェイス要素をバインドすることができます。以下は、コントロールを Entity Framework データにバインドする場合の注意点です。

  • コントロールへのデータ バインド
    EDM に対してクエリを実行すると、データが Object Services によって、エンティティ型のインスタンスであるオブジェクトとして返されます。それらのオブジェクトは直接コントロールにバインドでき、そのバインドで更新がサポートされます。したがって、SaveChanges メソッドが呼び出されると、コントロールのデータ (DataGridView の行など) に対する変更が自動的にデータベースに保存されます。

    クエリの結果を列挙して、データ バインドをサポートする DataGridView などのコントロールにデータを表示するアプリケーションは、そのコントロールを ObjectQuery の結果にバインドするように変更できます。

    詳細については、「コントロールへのオブジェクトのバインド (Entity Framework)」を参照してください。

  • ASP.NET データ ソース コントロール
    エンティティ フレームワーク には、ASP.NET Web アプリケーションのデータ バインドを単純化するために作られたデータ ソース コントロールが含まれています。詳細については、「Entity Framework データ ソース コントロール」を参照してください。

その他の注意点

以下は、特定の種類のアプリケーションを Entity Framework に移行する場合の注意点です。

  • データ サービスを公開するアプリケーション
    Windows Communication Foundation (WCF) をベースとする Web サービスやアプリケーションは、XML 要求/応答メッセージ形式を使用して基になるデータ ソースのデータを公開します。エンティティ フレームワーク では、バイナリ、XML、または WCF データ コントラクトのシリアル化を使用してエンティティ オブジェクトをシリアル化できます。バイナリ シリアル化と WCF シリアル化ではオブジェクト グラフの完全なシリアル化がサポートされています。詳細については、「Web サービスおよび Entity Data Model (アプリケーション シナリオ)」を参照してください。
  • XML データを使用するアプリケーション
    オブジェクトのシリアル化を使用すると、XML データを使用するアプリケーション (AJAX ベースのインターネット アプリケーションなど) にデータを提供する エンティティ フレームワーク データ サービスを作成できます。このようなケースでは ADO.NET Data Services の使用を検討してください。これらのデータ サービスは EDM に基づいており、GET、PUT、POST などの標準の Representational State Transfer (REST) HTTP アクションを使用したエンティティ データへの動的アクセスを提供します。詳細については、「ADO.NET Data Services フレームワーク」を参照してください。

    エンティティ フレームワーク はネイティブ XML データ型をサポートしていません。そのため、XML 列を持つテーブルにエンティティをマップすると、その XML 列に対応するエンティティ プロパティは文字列になります。このような場合は、オブジェクトを切断して XML としてシリアル化することができます。詳細については、「オブジェクトのシリアル化 (Entity Framework)」を参照してください。

    アプリケーションで XML データのクエリ機能が必要な場合も、LINQ to XML を使用して LINQ クエリを活用することができます。詳細については、「LINQ to XML」を参照してください。

  • 状態を保持するアプリケーション
    ASP.NET Web アプリケーションでは、Web ページやユーザー セッションの状態を保持しなければならないことがよくあります。ObjectContext インスタンス内のオブジェクトは、クライアントのビュー ステートやサーバーのセッション状態に格納できます。格納したオブジェクトを取得して新しいオブジェクト コンテキストに再アタッチすることもできます。詳細については、「オブジェクトのアタッチ (Entity Framework)」を参照してください。

参照

概念

配置に関する注意事項 (Entity Framework)
Entity Framework の用語

その他のリソース

Entity Framework タスク