如何:使用特定对象的键返回该对象(实体框架)
本主题说明如何按实体的键值(而非显式创建和执行对象查询)来检索实体。本主题中的示例基于 AdventureWorks 销售模型 (EDM)。若要运行这些示例中的代码,必须已将 AdventureWorks 销售模型添加到您的项目中,并将项目配置为使用 实体框架。为此,请完成如何:手动配置实体框架项目和如何:手动定义实体数据模型(实体框架) 中的过程。也可以使用实体数据模型向导定义 AdventureWorks 销售模型。有关更多信息,请参见如何:使用实体数据模型向导(实体框架)。
示例
本示例使用 ObjectContext 中的 GetObjectByKey 方法将具有指定 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());
}
}
另请参见
任务
如何:执行返回实体类型的查询(实体框架)
如何:使用查询路径调整结果(实体框架)