如何:使用特定对象的键返回特定对象(实体框架)
本主题说明如何按实体的键值(而非显式创建和执行对象查询)来检索实体。 本主题中的示例基于 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());
}
}
另请参见
任务
如何:执行返回实体类型对象的查询(实体框架)
如何:使用查询路径调整结果(实体框架)