DataServiceContext.AddLink(Object, String, Object) Método

Definición

Agrega el vínculo especificado al conjunto de objetos cuyo seguimiento realiza DataServiceContext.Adds the specified link to the set of objects the DataServiceContext is tracking.

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)

Parámetros

source
Object

Objeto de origen para el nuevo vínculo.The source object for the new link.

sourceProperty
String

Nombre de la propiedad de navegación del objeto de origen que devuelve el objeto relacionado.The name of the navigation property on the source object that returns the related object.

target
Object

Objeto relacionado con el objeto de origen por el nuevo vínculo.The object related to the source object by the new link.

Excepciones

Cuando source, sourceProperty o target son NULL.When source, sourceProperty, or target are null.

Si un vínculo ya existe.If a link already exists.

o bien-or- Si los objetos source o target están en un estado Detached o Deleted.If either the source or target objects are in a Detached or Deleted state.

o bien-or- Si sourceProperty no es una colección.If sourceProperty is not a collection.

Ejemplos

En el ejemplo siguiente se muestra cómo usar los métodos AddLink y SetLink para crear vínculos que definen relaciones.The following example shows how to use the AddLink and SetLink methods to create links that define relationships. En este ejemplo, las propiedades de navegación del objeto Order_Details también se establecen explícitamente.In this example, the navigation properties on the Order_Details object are also explicitly set. En este ejemplo se utiliza el DataServiceContext generado por la herramienta de Agregar referencia de servicio basada en el servicio de datos Northwind, que se crea al completar el Servicios de datos de WCFWCF Data Services.This example uses the DataServiceContext generated by the Add Service Reference tool based on the Northwind data service, which is created when you complete the Servicios de datos de WCFWCF 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)

Comentarios

Notifica a DataServiceContext que existe un nuevo vínculo entre los objetos de origen y de destino relacionados, y que la propiedad de origen especificada representa el vínculo.Notifies the DataServiceContext that a new link exists between the related source and target objects and that the link is represented by the specified source property. DataServiceContext agrega este vínculo al conjunto de vínculos recién creados que se enviarán al servicio de datos en la siguiente llamada a SaveChanges.The DataServiceContext adds this link to the set of newly created links that will be sent to the data service on the next call to SaveChanges.

Los vínculos son relaciones unidireccionales.Links are one-way relationships. Dado que las asociaciones son bidireccionales, en una asociación uno a uno, debe llamar a AddLink de nuevo para crear el vínculo inverso y, en una asociación de varios a uno, debe llamar a SetLink para crear un vínculo de referencia al extremo "uno" de la asociación.Because associations are bi-directional, in a one-to-one association you must call either AddLink again to create the reverse link, and in a many-to-one association you must call SetLink to create a reference link to the "one" end of the association.

El objeto de destino debe ser del tipo identificado por el parámetro sourceProperty o un subtipo del tipo.The target object must be of the type identified by the sourceProperty parameter or a subtype of the type.

Se aplica a