Export (0) Print
Expand All

DataServiceContext.AddLink Method

Adds the specified link to the set of objects the DataServiceContext is tracking.

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

public void AddLink(
	Object source,
	string sourceProperty,
	Object target
)

Parameters

source
Type: System.Object

The source object for the new link.

sourceProperty
Type: System.String

The name of the navigation property on the source object that returns the related object.

target
Type: System.Object

The object related to the source object by the new link.

ExceptionCondition
ArgumentNullException

When source, sourceProperty, or target are null.

InvalidOperationException

If a link already exists.

-or-

If either the source or target objects are in a Detached or Deleted state.

-or-

If sourceProperty is not a collection.

Notifies the DataServiceContext that a new link exists between the related source and target objects and that the link is represented by the specified source property. The DataServiceContext adds this link to the set of newly created links that will be sent to the data service on the next call to SaveChanges.

Links are one-way relationships. Because associations are bi-directional, in a one-to-one association you must call either AddLink again to create the reverse link, and in a many-to-one association you must call SetLink to create a reference link to the "one" end of the association.

The target object must be of the type identified by the sourceProperty parameter or a subtype of the type.

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. This example uses the DataServiceContext generated by the Add Service Reference tool based on the Northwind data service, which is created when you complete the WCF Data Services quickstart.

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

.NET Framework

Supported in: 4.5, 4, 3.5 SP1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

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

Show:
© 2014 Microsoft