Freigeben über


DataServiceContext.SetLink-Methode

Benachrichtigt DataServiceContext, dass ein neuer Link zwischen den Objekten vorhanden ist und dass der Link von der vom sourceProperty-Parameter angegebenen Eigenschaft vertreten wird.

Namespace:  System.Data.Services.Client
Assembly:  Microsoft.Data.Services.Client (in Microsoft.Data.Services.Client.dll)

Syntax

'Declaration
Public Sub SetLink ( _
    source As Object, _
    sourceProperty As String, _
    target As Object _
)
'Usage
Dim instance As DataServiceContext
Dim source As Object
Dim sourceProperty As String
Dim target As Object

instance.SetLink(source, sourceProperty, _
    target)
public void SetLink(
    Object source,
    string sourceProperty,
    Object target
)
public:
void SetLink(
    Object^ source, 
    String^ sourceProperty, 
    Object^ target
)
member SetLink : 
        source:Object * 
        sourceProperty:string * 
        target:Object -> unit 
public function SetLink(
    source : Object, 
    sourceProperty : String, 
    target : Object
)

Parameter

  • sourceProperty
    Typ: System.String
    Die Eigenschaft des Quellobjekts, das das Zielobjekt des neuen Links identifiziert.
  • target
    Typ: System.Object
    Das untergeordnete Objekt des neuen Links, der durch das Aufrufen dieser Methode initialisiert werden soll.Das Zielobjekt muss ein Untertyp des Typs sein, der vom sourceProperty-Parameter identifiziert wurde.Wenn target auf null gesetzt wird, stellt der Aufruf einen Löschlinkvorgang dar.

Ausnahmen

Ausnahme Bedingung
ArgumentNullException

Wenn source, sourceProperty oder target null sind.

InvalidOperationException

Wenn der angegebene Link bereits vorhanden ist.

- oder -

Wenn sich die als source bereitgestellten Objekte oder target im Status Detached oder Deleted befinden.

- oder -

Wenn sourceProperty keine Navigationseigenschaft ist, die einen Verweis auf ein einzelnes verknüpftes Objekt definiert.

Hinweise

Ein neuer Link wird mit dem Status Added erstellt. DataServiceContext fügt diesen neuen Link dem Satz von neu erstellten Links hinzu, der beim nächsten Aufruf von SaveChanges an den Datendienst gesendet werden. Weitere Informationen finden Sie unter Aktualisieren des Datendiensts WCF Data Services.

Wenn das Zielargument null ist, sollte der von sourceProperty dargestellte Link entfernt werden (der Link wird in den Status Deleted versetzt).

Diese Methode unterstützt nur das Hinzufügen von Links zu Beziehungen mit Multiplizität = 1 (Die Quelleigenschaft ist ein Objektverweis). Wenn eine Klasse Person mit einer anderen Person durch die Eigenschaft Friend verbunden ist, kann mit diesem Aufruf Person mit Person verbunden werden. Diese Methode löst eine Ausnahme aus, wenn der dargestellte Parameter sourceProperty mehrere Kardinalitätsbeziehungen hat.

Beispiele

Im folgenden Beispiel wird gezeigt, wie die AddLink-Methode und die SetLink-Methode verwendet werden, um Links zu erstellen, die Beziehungen definieren. In diesem Beispiel werden die Navigationseigenschaften für das Order_Details-Objekt auch explizit festgelegt.

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)
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);
}

Siehe auch

Verweis

DataServiceContext Klasse

System.Data.Services.Client-Namespace