DataServiceContext.AddLink(Object, String, Object) 方法

定义

将指定链接添加到 DataServiceContext 正在跟踪的一组对象。

public:
 void AddLink(System::Object ^ source, System::String ^ sourceProperty, System::Object ^ target);
public void AddLink (object source, string sourceProperty, object target);
member this.AddLink : obj * string * obj -> unit
Public Sub AddLink (source As Object, sourceProperty As String, target As Object)

参数

source
Object

新链接的源对象。

sourceProperty
String

源对象上可返回相关对象的导航属性的名称。

target
Object

通过新链接与源对象相关联的对象。

例外

sourcesourcePropertytarget 为 null 时。

如果链接已存在。

- 或 -

如果 sourcetarget 对象处于 DetachedDeleted 状态。

- 或 -

如果 sourceProperty 不是一个集合。

示例

以下示例演示如何使用 AddLinkSetLink 方法来创建用于定义关系的链接。 在此示例中,还显式设置了 Order_Details 对象的导航属性。 此示例使用DataServiceContext基于 Northwind 数据服务的“添加服务引用”工具生成的 ,该服务是在完成WCF Data Services 时创建的。

int productId = 25;
string customerId = "ALFKI";

Order_Detail newItem = null;

// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);

try
{
    // Get the specific product.
    var selectedProduct = (from product in context.Products
                           where product.ProductID == productId
                           select product).Single();

    // Get the specific customer.
    var cust = (from customer in context.Customers.Expand("Orders")
                where customer.CustomerID == customerId
                select customer).Single();

    // Get the first order.
    Order order = cust.Orders.FirstOrDefault();

    // Create a new order detail for the specific product.
    newItem = Order_Detail.CreateOrder_Detail(
        order.OrderID, selectedProduct.ProductID, 10, 5, 0);

    // Add the new order detail to the context.
    context.AddToOrder_Details(newItem);

    // Add links for the one-to-many relationships.
    context.AddLink(order, "Order_Details", newItem);
    context.AddLink(selectedProduct, "Order_Details", newItem);

    // Add the new order detail to the collection, and
    // set the reference to the product.
    order.Order_Details.Add(newItem);
    newItem.Product = selectedProduct;

    // Send the changes to the data service.
    DataServiceResponse response = context.SaveChanges();

    // Enumerate the returned responses.
    foreach (ChangeOperationResponse change in response)
    {
        // Get the descriptor for the entity.
        EntityDescriptor descriptor = change.Descriptor as EntityDescriptor;

        if (descriptor != null)
        {
            if (descriptor.Entity.GetType() == typeof(Order_Detail))
            {
                Order_Detail addedItem = descriptor.Entity as Order_Detail;

                if (addedItem != null)
                {
                    Console.WriteLine("New {0} item added to order {1}.",
                        addedItem.Product.ProductName, addedItem.OrderID.ToString());
                }
            }
        }
    }
}
catch (DataServiceQueryException ex)
{
    throw new ApplicationException(
        "An error occurred when saving changes.", ex);
}

// Handle any errors that may occur during insert, such as
// a constraint violation.
catch (DataServiceRequestException ex)
{
    throw new ApplicationException(
        "An error occurred when saving changes.", ex);
}
Dim productId = 25
Dim customerId = "ALFKI"

Dim newItem As Order_Detail = Nothing

' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)

Try
    ' Get the specific product.
    Dim selectedProduct = (From product In context.Products _
                                           Where product.ProductID = productId _
                                           Select product).Single()

    ' Get the specific customer.
    Dim cust = (From customer In context.Customers.Expand("Orders") _
                Where customer.CustomerID = customerId _
                Select customer).Single()

    ' Get the first order. 
    Dim order = cust.Orders.FirstOrDefault()

    ' Create a new order detail for the specific product.
    newItem = Order_Detail.CreateOrder_Detail( _
    order.OrderID, selectedProduct.ProductID, 10, 5, 0)

    ' Add the new order detail to the context.
    context.AddToOrder_Details(newItem)

    ' Add links for the one-to-many relationships.
    context.AddLink(order, "Order_Details", newItem)
    context.AddLink(selectedProduct, "Order_Details", newItem)

    ' Add the new order detail to the collection, and
    ' set the reference to the product.
    order.Order_Details.Add(newItem)
    newItem.Product = selectedProduct

    ' Send the insert to the data service.
    Dim response As DataServiceResponse = context.SaveChanges()

    ' Enumerate the returned responses.
    For Each change As ChangeOperationResponse In response
        ' Get the descriptor for the entity.
        Dim descriptor = TryCast(change.Descriptor, EntityDescriptor)

        If Not descriptor Is Nothing Then

            Dim addedProduct = TryCast(descriptor.Entity, Product)

            If Not addedProduct Is Nothing Then
                Console.WriteLine("New product added with ID {0}.", _
                    addedProduct.ProductID)
            End If
        End If
    Next
Catch ex As DataServiceQueryException
    Throw New ApplicationException( _
            "An error occurred when saving changes.", ex)

    ' Handle any errors that may occur during insert, such as 
    ' a constraint violation.
Catch ex As DataServiceRequestException
    Throw New ApplicationException( _
            "An error occurred when saving changes.", ex)

注解

通知 DataServiceContext,相关源与目标对象之间存在新链接,且该链接由指定的源属性表示。 DataServiceContext 将此链接添加到新创建的链接集,下次调用 SaveChanges 时,会将该链接集发送到数据服务。

链接是单向关系。 由于关联是双向的,因此在一对一关联中,必须再次调用以 AddLink 创建反向链接,在多对一关联中,必须调用 SetLink 来创建指向关联“一”端的引用链接。

目标对象类型必须是 sourceProperty 参数所标识的类型或该类型的子类型。

适用于