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

정의

지정한 개체 사이에 새 링크가 있고 해당 링크가 매개 변수로 지정된 속성으로 표시됨을 sourcePropertyDataServiceContext 수 있습니다.

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 형식의 하위 형식이어야 합니다. null로 설정된 경우 target 호출은 링크 삭제 작업을 나타냅니다.

예외

source또는 sourcePropertytarget null입니다.

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

-또는-

제공되거나 sourcetarget 상태에 있는 DetachedDeleted 개체입니다.

-또는-

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 와 관련된 경우 이 호출을 사용하여 연결 PersonPersonPerson 있습니다.Friend 이 메서드는 표현된 카디널리티의 관계가 둘 이상인 경우 sourceProperty 예외를 throw합니다.

적용 대상