Entity Framework (SQL Server Compact)

Entity Framework は、データ指向ソフトウェア アプリケーションの開発をサポートする ADO.NET の一連のテクノロジです。Entity Framework を使用すると、ドメイン固有のオブジェクトやプロパティの形式のデータ (顧客や顧客の住所など) を操作することができます。そのデータが格納されている、基になるデータベースのテーブルや列のことを気にする必要はありません。

Entity Framework では、より高度な抽象化レベルでデータを操作できるため、特定のデータ ストレージ エンジンやリレーショナル スキーマに依存しないコードを作成できます。開発者は、直接リレーショナル ストレージ スキーマに対してプログラミングを行うのではなく、アプリケーションの概念モデルに対してプログラミングを行うことによってデータ アクセス アプリケーションを作成できます。

Entity Framework のアプリケーションとサービスは、概念モデル、ストレージ モデル、およびこの 2 つのマッピングによって構成されます。既存のデータベースからエンティティ データ モデル (EDM) を抽出したいという開発者のニーズに応えるために、Entity Framework には、EDM を生成および検証したり、概念モデルに基づいてプログラミング可能なクラスを作成したりする一連のツールが用意されています。

ADO.NET は、EDM を通じてエンティティを .NET 環境のオブジェクトとして公開します。これにより、オブジェクト層が統合言語クエリ (LINQ) サポートの理想的なターゲットになります。LINQ to Entities では、開発環境で LINQ の式と標準クエリ演算子を直接使用することにより、Entity Framework オブジェクト コンテキストに対して柔軟で厳密に型指定されたクエリを作成できるようになります。Entity Framework と LINQ to Entities の詳細については、「Entity Framework」を参照してください。

SQL Server Compact では、SQL Server Compact 3.5 Service Pack 1 (SP1) 以降の Windows デスクトップ プラットフォームで Entity Framework がサポートされています。

SQL Server Compact における Entity Framework

SQL Server Compact で Entity Framework を使用するには、まず Entity Framework をインストールします。Entity Framework は、.NET Framework 3.5 Service Pack 1 (SP1) 以降の .NET Framework のコンポーネントです。

SQL Server Compact の開発サポートは Visual Studio で提供されます。Visual Studio における Entity Framework に対する Entity Data Model Designer のサポートは、Entity Framework Tools で提供されます。Entity Data Model Designer (エンティティ デザイナ) は、Visual Studio 2008 Service Pack 1 (SP1) 以降の Visual Studio のコンポーネントで、エンティティ データ モデル (EDM) の作成や編集に使用されるビジュアル ツールです。このツールの詳細については、「Entity Framework」を参照してください。

SQL Server Compact 3.5 SP1 リリース以降の SQL Server Compact には、System.Data.SQLServerCe.Entity.dll というマネージ アセンブリが用意されています。System.Data.SQLServerCe.Entity.dll アセンブリは、ADO.NET マネージ データ プロバイダーの System.Data.SqlServerCE.dll によって内部で使用され、エンティティ データ モデル (EDM) に記述されているデータへのアクセスをサポートします。

SQL Server Compact (SSCERuntime-ENU.msi) の SQL Server Compact 3.5 SP1 以降のリリースをインストールすると、System.Data.SQLServerCe.Entity.dll が %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5 フォルダーにインストールされます。

SQL Server Compact の制限

SQL Server Compact を Entity Framework と共に使用する場合、以下の制限事項があります。

  • SQL Server Compact では、Entity Framework と共に使用する場合、サーバーで生成されたキーや値を持つエンティティはサポートされません。

    Entity Framework を使用する場合、エンティティのキーは、サーバーで生成されたとしてマークされます。これにより、エンティティの挿入や作成時に、データベースがキーの値を生成することができます。さらに、エンティティの 0 個以上のプロパティが、サーバーで生成された値としてマークされます。詳細については、Entity Framework ドキュメントの「Store Generated Pattern」を参照してください。

    Entity Framework では、サーバーで生成されたキーや値を持つエンティティの種類を定義できますが、SQL Server Compact では、Entity Framework と共に使用する場合、サーバーで生成されたキーや値を持つエンティティはサポートされません。サーバーで生成された値を持つエンティティに対してデータ操作を実行すると、"サポートされていない" という内容の例外がスローされます。

  • SQL Server Compact では、Entity Framework と共に使用する場合、ページング クエリでの SKIP 式はサポートされません。 LIMIT 式や TOP 式は、ページング クエリでサポートされています。

    ページング クエリは、クエリの結果でステートレス ページング (スクロールやウィンドウ化) をサポートするように設計されています。

    次の例は、LINQ Skip 演算子と Take 演算子を使用して Entity Framework でページング クエリを作成する方法を示しています。SQL Server Compact ではページング クエリで SKIP 式はサポートされません。

    LINQ:

    customers.OrderBy(c => c.Name).Skip(10).Take(20) 
    

    次の例は、Entity SQL の SKIP、LIMIT、および TOP の各構文を使用して Entity Framework でページング クエリを作成する方法を示しています。SQL Server Compact ではページング クエリで SKIP 式はサポートされません。

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name skip 10 limit 20; 
    
  • Entity SQL では完全外部結合がサポートされていますが、SQL Server Compact では、Entity Framework を使用する完全外部結合はサポートされません。たとえば、次のクエリはサポートされていません。

    Entity SQL:

    SELECT c.Name, c.Id, o.Id 
    FROM NW.Customers AS c 
    FULL OUTER JOIN NW.Orders AS o ON c.Id = o.CustomerId
    

    Entity Framework を使用する内部結合、左外部結合、および右外部結合はサポートされています。

  • SQL Server Compact では、Entity SQL クエリの ORDER BY 句における COLLATE サブ句の指定はサポートされていません。

    Entity SQL では、ORDER BY 句の各キーの一部に COLLATE サブ句を指定できます。COLLATE サブ句は文字列値の式にのみ使用でき、その式に使用する比較セマンティクスを決定します。

    SQL Server Compact では、Entity Framework と共に使用する場合、Entity SQL クエリの ORDER BY 句における COLLATE サブ句の使用はサポートされません。たとえば、次のクエリはサポートされていません。

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai 
    
  • SQL Server とは異なり、SQL Server Compact では、real、float、money、および numeric データ型での剰余演算子 (%) はサポートされません。

    SQL Server Compact で次のクエリを実行するとエラー メッセージが表示されます。

    Entity SQL:

    ( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) ) 
    

    Transact-SQL:

    SELECT cast (1 as smallint) %cast (1 as decimal(28,4)) 
    

    このようなクエリを実行すると、"剰余は real、float、money、および numeric データ型ではサポートされていません。[ Data type = numeric ]" というエラー メッセージが表示されます。

  • SQL Server Compact では、集計 (max、min、sum、count) における DISTINCT の使用はサポートされていません。

    集計 (max、min、sum、count) で DISTINCT を使用する Entity SQL クエリや Transact-SQL クエリを作成しようとすると、"サポートされていない" という内容の例外がスローされます。集計 count で DISTINCT を使用する Entity SQL クエリを次の例に示します。

    Entity SQL:

    SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
    
  • SQL Server Compact では、Entity Framework と共に使用する場合、コマンド タイムアウトはサポートされません。

    Entity Framework では、ObjectContext.QueryTimeout プロパティまたは EntityCommand.CommandTimeout プロパティを使用して、コマンド タイムアウトを指定できます。

    SQL Server Compact では、Entity Framework と共に使用する場合、コマンド タイムアウトはサポートされません。つまり、コマンド タイムアウトには 0 以外の値を設定しないでください。接続タイムアウト プロパティを設定すると、SQL Server Compact データベースから NotSupportedException(“CommandTimeout”) 例外がスローされます。

  • SQL Server Compact では、Unicode 文字列のみがサポートされます。

    Entity Framework では、Unicode 文字列と非 Unicode 文字列両方がサポートされています。SQL Server Compact では、Unicode 文字列のみがサポートされます。'String' 型のリテラル <literal> は、現在のプロバイダでサポートされていません。SQL Server Compact で非 Unicode 文字列を使用すると、"near constant literal" という内容の例外がスローされます。

  • SQL Server Compact では、ストアド プロシージャやビューはサポートされません。

SQL Server Compact データベースをデータ ソースとして使用する Entity Framework アプリケーションを作成する方法については、「エンティティ フレームワーク アプリケーションの作成 (SQL Server Compact)」を参照してください。

関連項目

その他の技術情報

マネージ アプリケーションの構築 (SQL Server Compact)