本主题介绍如何使用 EntityReference 对象在对象上下文中更改两个对象间的关系。 调用 SaveChanges 方法时,关系更改将作为相关表中外键的更改永久保留到数据库。 有关更多信息,请参见如何:在关联更改过程中执行业务逻辑。
本主题中的示例基于 Adventure Works 销售模型。若要运行本主题中的代码,则必须已经将 Adventure Works 销售模型添加到了您的项目中,并且已经将项目配置为使用实体框架。有关更多信息,请参见如何:使用实体数据模型向导(实体框架)或如何:手动配置实体框架项目和如何:手动定义实体数据模型(实体框架)。
示例
此示例演示如何使用 EntityReference 对象更改 SalesOrderHeader 对象和表示订单发货地址的相关 Address 对象之间的关系。
' Define the order and new address IDs.
Dim orderId As Integer = 43669
Dim addressId As Integer = 26
Using context As New AdventureWorksEntities()
' Get the billing address to change to.
Dim address As Address = context.Addresses.Single(Function(c) c.AddressID = addressId)
' Get the order being changed.
Dim order As SalesOrderHeader = context.SalesOrderHeaders.Single(Function(o) o.SalesOrderID = orderId)
' You do not have to call the Load method to load the addresses for the order,
' because lazy loading is set to true
' by the constructor of the AdventureWorksEntities object.
' With lazy loading set to true the related objects are loaded when
' you access the navigation property. In this case Address.
' Write the current billing street address.
Console.WriteLine("Current street: " & order.Address.AddressLine1)
' Change the billing address.
If Not order.Address.Equals(address) Then
' Use Address navigation property to change the association.
order.Address = address
' Write the changed billing street address.
Console.WriteLine("Changed street: " & order.Address.AddressLine1)
End If
' If the address change succeeds, save the changes.
context.SaveChanges()
' Write the current billing street address.
Console.WriteLine("Current street: " & order.Address.AddressLine1)
End Using
// Define the order and new address IDs.
int orderId = 43669;
int addressId = 26;
using (AdventureWorksEntities context
= new AdventureWorksEntities())
{
// Get the billing address to change to.
Address address =
context.Addresses.Single(c => c.AddressID == addressId);
// Get the order being changed.
SalesOrderHeader order =
context.SalesOrderHeaders.Single(o => o.SalesOrderID == orderId);
// You do not have to call the Load method to load the addresses for the order,
// because lazy loading is set to true
// by the constructor of the AdventureWorksEntities object.
// With lazy loading set to true the related objects are loaded when
// you access the navigation property. In this case Address.
// Write the current billing street address.
Console.WriteLine("Current street: "
+ order.Address.AddressLine1);
// Change the billing address.
if (!order.Address.Equals(address))
{
// Use Address navigation property to change the association.
order.Address = address;
// Write the changed billing street address.
Console.WriteLine("Changed street: "
+ order.Address.AddressLine1);
}
// If the address change succeeds, save the changes.
context.SaveChanges();
// Write the current billing street address.
Console.WriteLine("Current street: "
+ order.Address.AddressLine1);
}
另请参见
任务
如何:使用外键属性更改对象之间的关系
如何:在关联更改过程中执行业务逻辑