This documentation is archived and is not being maintained.

DataServiceContext.SetLink Method

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.

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

'Declaration
Public Sub SetLink ( _
	source As Object, _
	sourceProperty As String, _
	target As Object _
)

Parameters

source
Type: System.Object
The source object for the new link.
sourceProperty
Type: System.String
The property on the source object that identifies the target object of the new link.
target
Type: System.Object
The child object involved in the new link that is to be initialized by calling this method. The target object must be a subtype of the type identified by the sourceProperty parameter. If target is set to null, the call represents a delete link operation.

ExceptionCondition
ArgumentNullException

When source, sourceProperty or target are null.

InvalidOperationException

When the specified link already exists.

-or-

When the objects supplied as source or target are in the Detached or Deleted state.

-or-

When sourceProperty is not a navigation property that defines a reference to a single related object.

A new link is created in the Added state. 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. For more information, see Updating the Data Service (WCF Data Services).

If the target argument is null, the link represented by sourceProperty should be removed or deleted (The link is moved to the Deleted state).

This method only supports adding links to relationships with multiplicity = 1 (The source property is an object reference). 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. This method will throw an exception if the sourceProperty represented has a relationship of cardinality more than one.

The following example shows how to use the AddLink and SetLink methods to create links that define relationships. In this example, the navigation properties on the Order_Details object are also explicitly set.


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)


.NET Framework

Supported in: 4, 3.5 SP1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Show: