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

Definición

Notifica a DataServiceContext que existe un nuevo vínculo entre los objetos especificados y que la propiedad especificada por el parámetro sourceProperty representa el vínculo.Notifies the DataServiceContext that a new link exists between the objects specified and that the link is represented by the property specified by the sourceProperty parameter.

public:
 void SetLink(System::Object ^ source, System::String ^ sourceProperty, System::Object ^ target);
public void SetLink (object source, string sourceProperty, object target);
member this.SetLink : obj * string * obj -> unit
Public Sub SetLink (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

Propiedad del objeto de origen que identifica el objeto de destino del nuevo vínculo.The property on the source object that identifies the target object of the new link.

target
Object

Objeto secundario implicado en el nuevo vínculo que debe inicializarse llamando a este método.The child object involved in the new link that is to be initialized by calling this method. El objeto de destino debe ser un subtipo del tipo identificado por el parámetro sourceProperty.The target object must be a subtype of the type identified by the sourceProperty parameter. Si target se establece en null, la llamada representa una operación de eliminación de vínculo.If target is set to null, the call represents a delete link operation.

Excepciones

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

Cuando el vínculo especificado ya existe.When the specified link already exists.

O bien-or- Cuando los objetos suministrados como source o target están en el estado Detached o Deleted.When the objects supplied as source or target are in the Detached or Deleted state.

o bien-or- Cuando sourceProperty no es una propiedad de navegación que define una referencia a un objeto relacionado único.When sourceProperty is not a navigation property that defines a reference to a single related object.

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.

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

Un nuevo vínculo se crea en el estado Added.A new link is created in the Added state. DataServiceContext agrega este nuevo 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 new link to the set of newly created links to be sent to the data service on the next call to SaveChanges.

Si el argumento target es NULL, el vínculo representado por sourceProperty se debe quitar o eliminar. (El vínculo pasa al estado Deleted).If the target argument is null, the link represented by sourceProperty should be removed or deleted (The link is moved to the Deleted state).

Los vínculos son relaciones unidireccionales.Links are one-way relationships. Si existe un puntero de retroceso que indica una asociación bidireccional, se debe llamar de nuevo a este método para notificar al DataServiceContext del segundo vínculoIf a back pointer exists indicating a two way association, this method should be called again to notify the DataServiceContext of the second link

Este método solo admite agregar vínculos a relaciones con multiplicidad = 1 (La propiedad de origen es una referencia de objeto).This method only supports adding links to relationships with multiplicity = 1 (The source property is an object reference). Por ejemplo, si una clase Person está relacionada con otra Person mediante una propiedad Friend, esta llamada se podría usar para relacionar Person con Person.For example, if a class Person is related to another Person by a Friend property, this call could be used to relate Person to Person. Este método producirá una excepción si el parámetro sourceProperty representado tiene una relación de cardinalidad de más de uno.This method will throw an exception if the sourceProperty represented has a relationship of cardinality more than one.

Se aplica a