如何:使用特定对象的键返回特定对象(实体框架)

本主题说明如何按实体的键值(而非显式创建和执行对象查询)来检索实体。 本主题中的示例基于 AdventureWorks 销售模型。 若要运行这些示例中的代码,必须已将 AdventureWorks 销售模型添加到您的项目中,并将项目配置为使用实体框架 。 为此,请完成如何:手动配置实体框架项目如何:手动定义模型和映射文件(实体框架)中的过程。 也可以使用实体数据模型向导定义 AdventureWorks 销售模型。 有关更多信息,请参见如何:使用实体数据模型向导(实体框架)

示例

本示例使用 ObjectContext 中的 GetObjectByKey 方法将具有指定 EntityKey 的对象返回到对象上下文中。 本示例处理当提供的 EntityKey 与现有实体不符时发生的 ObjectNotFoundException。 为避免 ObjectNotFoundException,请调用 TryGetObjectByKey,它将返回 false 而不引发异常。

Using context 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.SalesOrderHeaders", entityKeyValues)

        ' Get the object from the context or the persisted store by its key. 
        Dim order As SalesOrderHeader = DirectCast(context.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 context =
    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.SalesOrderHeaders", entityKeyValues);

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

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

另请参见

任务

如何:执行返回实体类型对象的查询(实体框架)
如何:使用查询路径调整结果(实体框架)

概念

查询概念模型(实体框架)