언어

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

예외

때 source또는 sourcePropertytarget null입니다.

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

-또는-

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

-또는-

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.

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

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

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

적용 대상