다음을 통해 공유


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

정의

DataServiceContext에서 추적 중인 개체 집합에 지정된 링크를 추가합니다.

public:
 void AddLink(System::Object ^ source, System::String ^ sourceProperty, System::Object ^ target);
public void AddLink (object source, string sourceProperty, object target);
member this.AddLink : obj * string * obj -> unit
Public Sub AddLink (source As Object, sourceProperty As String, target As Object)

매개 변수

source
Object

새 링크의 원본 개체입니다.

sourceProperty
String

관련 개체를 반환하는 원본 개체의 탐색 속성 이름입니다.

target
Object

새 링크를 통해 원본 개체와 관련된 개체입니다.

예외

source, sourceProperty 또는 target이 null인 경우

링크가 이미 있는 경우

또는

source 또는 target 개체가 Detached 또는 Deleted 상태인 경우

또는

sourceProperty가 컬렉션이 아닌 경우

예제

다음 예에서는 및 SetLink 메서드를 AddLink 사용하여 관계를 정의하는 링크를 만드는 방법을 보여 줍니다. 이 예제에서는 개체의 탐색 속성 Order_Details 도 명시적으로 설정됩니다. 이 예제에서는 WCF Data Services 완료할 때 만들어지는 Northwind 데이터 서비스를 기반으로 서비스 참조 추가 도구에서 생성된 를 사용합니다DataServiceContext.

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)

설명

관련 원본 개체와 대상 개체 사이에 새 링크가 있고 링크가 지정된 원본 속성으로 표시됨을 알 DataServiceContext 수 있습니다. 는 DataServiceContext 다음에 를 호출 SaveChanges할 때 데이터 서비스로 전송될 새로 만든 링크 집합에 이 링크를 추가합니다.

링크는 단방향 관계입니다. 연결은 양방향이므로 일대일 연결에서 다시 를 호출 AddLink 하여 역방향 링크를 만들어야 하며, 다대일 연결에서 를 호출 SetLink 하여 연결의 "일" 끝에 대한 참조 링크를 만들어야 합니다.

대상 개체는 매개 변수 또는 형식의 하위 형식으로 sourceProperty 식별되는 형식이어야 합니다.

적용 대상