Share via


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

Définition

Informe le DataServiceContext qu'un nouveau lien existe entre les objets spécifiés et que ce lien est représenté par la propriété spécifiée par le paramètre sourceProperty.

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)

Paramètres

source
Object

Objet source pour le nouveau lien.

sourceProperty
String

Propriété sur l'objet source qui identifie l'objet cible du nouveau lien.

target
Object

L'objet enfant est impliqué dans le nouveau lien qui doit être initialisé en appelant cette méthode. L'objet cible doit être un sous-type du type identifié par le paramètre sourceProperty. Si target a la valeur null, l'appel représente une opération de suppression de lien.

Exceptions

Lorsque source, sourceProperty ou target est null.

Le lien spécifié existe déjà.

-ou-

Les objets fournis en tant que source ou target sont dans l’état Detached ou .Deleted

-ou-

sourceProperty n’est pas une propriété de navigation qui définit une référence à un objet associé unique.

Exemples

L'exemple suivant montre comment utiliser les méthodes AddLink et SetLink pour créer des liens qui définissent des relations. Dans cet exemple, les propriétés de navigation sur l'objet Order_Details sont également définies explicitement.

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)

Remarques

Un lien est créé à l'état Added. Le DataServiceContext ajoute ce nouveau lien à l'ensemble de liens nouvellement créés à envoyer au service de données lors de l'appel suivant à SaveChanges.

Si l’argument cible est null, le lien représenté par sourceProperty doit être supprimé (le lien passe à l’état Deleted).

Les liens sont des relations unidirectionnelles. S’il existe un pointeur arrière indiquant une association bidirectionnelle, cette méthode doit être appelée à nouveau pour notifier le DataServiceContext du deuxième lien

Cette méthode prend en charge uniquement l'ajout de liens vers des relations avec multiplicité = 1 (la propriété source est une référence d'objet). Par exemple, si une classe Person est liée à un autre Person par une propriété Friend, cet appel peut être utilisé pour mettre en relation Person avec Person. Cette méthode lève une exception si la sourceProperty représentée a une relation de cardinalité supérieure à un.

S’applique à