Поделиться через


Как выполнить возврат конкретного объекта с использованием его ключа (Entity Framework)

В этом разделе приведено описание того, как получить сущность по значениям ее ключей вместо явного создания и выполнения запроса объектов. Примеры в этом разделе основаны на модели Модель AdventureWorks Sales (модель EDM). Чтобы запустить код в этом примере, необходимо добавить в проект модель AdventureWorks Sales и настроить проект для использования платформы Entity Framework. Для этого выполните инструкции из разделов Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (платформа Entity Framework). Для определения модели AdventureWorks Sales можно также использовать мастер моделей EDM. Дополнительные сведения см. в разделе Как использовать мастер моделей EDM (платформа Entity Framework).

Примеры

В данном примере используется метод GetObjectByKey применительно к ObjectContext для возврата объекта с указанным значением EntityKey в контекст объекта. В этом примере осуществляется обработка исключения ObjectNotFoundException, которое возникает, если предоставленное значение EntityKey не соответствует ни одной существующей сущности. Для предотвращения возникновения исключений 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)

Другие ресурсы

Запросы к модели EDM (задачи Entity Framework)