DataServiceContext.SetLink(Object, String, Object) Methode

Definitie

Hiermee wordt aangegeven DataServiceContext dat er een nieuwe koppeling bestaat tussen de opgegeven objecten en of de koppeling wordt vertegenwoordigd door de eigenschap die is opgegeven door de 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)

Parameters

source
Object

Het bronobject voor de nieuwe koppeling.

sourceProperty
String

De eigenschap op het bronobject dat het doelobject van de nieuwe koppeling identificeert.

target
Object

Het onderliggende object dat betrokken is bij de nieuwe koppeling die moet worden geïnitialiseerd door deze methode aan te roepen. Het doelobject moet een subtype zijn van het type dat wordt geïdentificeerd door de sourceProperty parameter. Als target deze optie is ingesteld op null, vertegenwoordigt de aanroep een verwijderkoppelingsbewerking.

Uitzonderingen

Wanneer source, sourceProperty of target null is.

De opgegeven koppeling bestaat al.

– of –

De objecten die zijn opgegeven als source of target zich in de Detached of Deleted status bevinden.

– of –

sourceProperty is geen navigatie-eigenschap die een verwijzing naar één gerelateerd object definieert.

Voorbeelden

In het volgende voorbeeld ziet u hoe u de AddLink en SetLink methoden gebruikt om koppelingen te maken waarmee relaties worden gedefinieerd. In dit voorbeeld worden de navigatie-eigenschappen van het Order_Details object ook expliciet ingesteld.

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)

Opmerkingen

Er wordt een nieuwe koppeling gemaakt in de Added status. Hiermee DataServiceContext voegt u deze nieuwe koppeling toe aan de set nieuwe koppelingen die naar de gegevensservice moeten worden verzonden bij de volgende aanroep naar SaveChanges.

Als het doelargument null is, moet de koppeling die wordt vertegenwoordigd door sourceProperty worden verwijderd of verwijderd (de koppeling wordt verplaatst naar de Deleted status).

Koppelingen zijn eenrichtingsrelaties. Als er een back-pointer bestaat die een koppeling in twee richtingen aangeeft, moet deze methode opnieuw worden aangeroepen om de tweede koppeling op de DataServiceContext hoogte te stellen

Deze methode biedt alleen ondersteuning voor het toevoegen van koppelingen naar relaties met multiplicity = 1 (De broneigenschap is een objectverwijzing). Als een klasse bijvoorbeeld is gerelateerd aan een andere Person klasse Person door een Friend eigenschap, kan deze aanroep worden gebruikt om te relateren Person aan Person. Met deze methode wordt een uitzondering gegenereerd als de sourceProperty vertegenwoordigde een relatie van kardinaliteit meer dan één heeft.

Van toepassing op