DataServiceContext.SetLink(Object, String, Object) Метод

Определение

Уведомляет DataServiceContext, что имеется новая ссылка между указанными объектами и что ссылка представлена свойством, указанным параметром 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)

Параметры

source
Object

Исходный объект для новой ссылки.

sourceProperty
String

Свойство исходного объекта, определяющего целевой объект новой ссылки.

target
Object

Дочерний объект в новой ссылке, который должен быть инициализирован путем вызова данного метода. Целевой объект должен иметь подтип типа, определяемого параметром sourceProperty. Если target задано неопределенное значение, вызов представляет операцию удаления ссылки.

Исключения

Если source, sourceProperty или target имеют значение NULL.

Указанная ссылка уже существует.

-или-

Объекты, предоставленные как source или target , находятся в Detached состоянии или Deleted .

-или-

sourceProperty не является свойством навигации, определяющим ссылку на один связанный объект.

Примеры

В следующем примере показано, как использовать методы AddLink и SetLink для создания ссылок, которые определяют связи. В этом примере также явно заданы свойства навигации объекта Order_Details.

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)

Комментарии

Новая ссылка создается с состоянием Added. DataServiceContext добавляет эту новую ссылку в набор вновь созданных ссылок, которые передаются в службу данных при следующем вызове SaveChanges.

Если целевой аргумент не определен, ссылку, представленную sourceProperty, следует переместить или удалить (ссылка перемещается в состояние Deleted).

Ссылки являются односторонними связями. Если существует обратный указатель, указывающий на двустороннее сопоставление, этот метод следует вызвать еще раз, чтобы уведомить о DataServiceContext второй ссылке.

Этот метод поддерживает только добавление ссылок к отношениям со значением кратности = 1 (исходное свойство является ссылкой на объект). Например, если класс Person связан с другим классом Person с помощью свойства Friend, этот вызов можно использовать для связи Person с Person. Этот метод создает исключение, если представленный sourceProperty содержит связь с количеством элементов более одного.

Применяется к