次の方法で共有


キーを使用して特定のオブジェクトを返す方法 (Entity Framework)

このトピックでは、オブジェクト クエリを明示的に作成して実行する代わりに、エンティティをそのキー値で取得する方法について説明します。このトピックの例には、AdventureWorks Sales Model (EDM) が使用されています。これらの例のコードを実行するには、あらかじめプロジェクトに AdventureWorks Sales Model を追加し、エンティティ フレームワーク が使用されるようにプロジェクトを構成しておく必要があります。具体的な方法については、「Entity Framework プロジェクトを手動で構成する方法」と「Entity Data Model を手動で定義する方法 (Entity Framework)」の手順を参照してください。Entity Data Model ウィザードを使用して、AdventureWorks Sales Model を定義することもできます。詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」を参照してください。

この例では、ObjectContextGetObjectByKey メソッドを使用し、オブジェクト コンテキストに対して EntityKey を指定することによって、対応するオブジェクトを取得します。指定した EntityKey に対応する既存のエンティティが見つからなかった場合、ObjectNotFoundException が発生します。この例には、そのための例外処理も記述されています。ObjectNotFoundException を防ぐには、TryGetObjectByKey を呼び出します。この場合、例外は生成されずに、false が返されます。

Using advWorksContext As New AdventureWorksEntities
    Try
        ' Define the entity key values.
        Dim entityKeyValues As IEnumerable(Of KeyValuePair(Of String, Object)) = _
                New KeyValuePair(Of String, Object)() { _
                    New KeyValuePair(Of String, Object)("SalesOrderID", 43680)}

        ' Create the  key for a specific SalesOrderHeader object. 
        Dim key As New EntityKey("AdventureWorksEntities.SalesOrderHeader", entityKeyValues)

        Dim order As SalesOrderHeader = _
            CType(advWorksContext.GetObjectByKey(key), SalesOrderHeader)

        Console.WriteLine("SalesOrderID:{0}Order Number: {1}", _
            order.SalesOrderID, order.SalesOrderNumber)

    Catch ex As ObjectNotFoundException
        Console.WriteLine(ex.ToString)
    End Try
End Using
using (AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities())
{
    try
    {
        // Define the entity key values.
        IEnumerable<KeyValuePair<string, object>> entityKeyValues =
            new KeyValuePair<string, object>[] { 
                new KeyValuePair<string, object>("SalesOrderID", 43680) };

        // Create the  key for a specific SalesOrderHeader object. 
        EntityKey key = new EntityKey("AdventureWorksEntities.SalesOrderHeader", entityKeyValues);

        // Get the object from the context or the persisted store by its key.
        SalesOrderHeader order =
            (SalesOrderHeader)advWorksContext.GetObjectByKey(key);

        Console.WriteLine("SalesOrderID: {0} Order Number: {1}",
            order.SalesOrderID, order.SalesOrderNumber);
    }
    catch (ObjectNotFoundException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

参照

処理手順

エンティティ型を返すクエリの実行方法 (Entity Framework)
クエリ パスを使用して結果を構築する方法 (Entity Framework)

概念

オブジェクトとしてのデータのクエリ (Entity Framework)

その他のリソース

Entity Data Model のクエリ (Entity Framework タスク)