DataServiceContext.SetLink(Object, String, Object) 메서드

정의

지정된 개체 간에 새 링크가 있고 이 링크가 sourceProperty 매개 변수로 지정한 속성으로 표시된다는 것을 DataServiceContext에 알립니다.

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이 null로 설정된 경우 이 호출은 링크 삭제 작업을 나타냅니다.

예외

source, sourceProperty 또는 target가 null인 경우.

지정한 링크가 이미 있습니다.

또는

또는 로 source 제공된 개체가 또는 Deleted 상태에 있습니다Detached.target

또는

sourceProperty 는 단일 관련 개체에 대한 참조를 정의하는 탐색 속성이 아닙니다.

예제

다음 예에서는 및 SetLink 메서드를 AddLink 사용하여 관계를 정의하는 링크를 만드는 방법을 보여 줍니다. 이 예제에서는 개체의 탐색 속성 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할 때 데이터 서비스로 보낼 새로 만든 링크 집합에 이 새 링크를 추가합니다.

대상 인수가 null이면 sourceProperty로 표시되는 링크를 제거하거나 삭제해야 합니다(링크가 상태로 이동 Deleted 됨).

링크는 단방향 관계입니다. 양방향 연결을 나타내는 뒤로 포인터가 있는 경우 두 번째 링크를 알리 DataServiceContext 기 위해 이 메서드를 다시 호출해야 합니다.

이 메서드는 multiplicity = 1이 있는 관계에 대한 링크만 추가하도록 지원합니다(원본 속성은 개체 참조임). 예를 들어 클래스가 속성에 의해 다른 Person 클래스 Person 와 관련된 경우 이 호출을 Friend 사용하여 와 연결할 PersonPerson수 있습니다. 이 메서드는 표현된 가 sourceProperty 카디널리티의 관계가 둘 이상인 경우 예외를 throw합니다.

적용 대상