DataServiceContext.SetLink メソッド

指定されたオブジェクト間に新しいリンクが存在することと、そのリンクが sourceProperty パラメーターで指定されたプロパティによって表されることを DataServiceContext に通知します。

名前空間:  System.Data.Services.Client
アセンブリ:  Microsoft.Data.Services.Client (Microsoft.Data.Services.Client.dll)

構文

'宣言
Public Sub SetLink ( _
    source As Object, _
    sourceProperty As String, _
    target As Object _
)
'使用
Dim instance As DataServiceContext
Dim source As Object
Dim sourceProperty As String
Dim target As Object

instance.SetLink(source, sourceProperty, _
    target)
public void SetLink(
    Object source,
    string sourceProperty,
    Object target
)
public:
void SetLink(
    Object^ source, 
    String^ sourceProperty, 
    Object^ target
)
member SetLink : 
        source:Object * 
        sourceProperty:string * 
        target:Object -> unit 
public function SetLink(
    source : Object, 
    sourceProperty : String, 
    target : Object
)

パラメーター

  • source
    型: System.Object
    新しいリンクのソース オブジェクト。
  • sourceProperty
    型: System.String
    新しいリンクのターゲット オブジェクトを識別する、ソース オブジェクトのプロパティ。
  • target
    型: System.Object
    このメソッドを呼び出すことによって初期化される新しいリンクに含まれる子オブジェクト。ターゲット オブジェクトは、sourceProperty パラメーターで識別される型のサブタイプである必要があります。target が null に設定されている場合、この呼び出しはリンクの削除操作を表します。

例外

例外 条件
ArgumentNullException

source、sourceProperty、または target が null の場合。

InvalidOperationException

指定したリンクが既に存在する場合。

または

source または target として指定されたオブジェクトの状態が Detached または Deleted の場合。

または

sourceProperty が 1 つの関連オブジェクトへの参照を定義するナビゲーション プロパティではない場合。

説明

新しいリンクは Added 状態で作成されます。 DataServiceContext は、SaveChanges への次の呼び出しでデータ サービスに送信される新しく作成されたリンクのセットにこの新しいリンクを追加します。 詳細については、「データ サービスの更新 (WCF Data Services)」を参照してください。

ターゲット引数が null の場合は、sourceProperty で表されるリンクを削除する必要があります (このリンクは Deleted 状態に変更されます)。

このメソッドは、複数要素の接続性が 1 のリレーションシップへのリンクの追加のみをサポートします (ソース プロパティはオブジェクト参照です)。 たとえば、Person クラスが Friend プロパティによって別の Person に関連付けられている場合、この呼び出しを使用して Person を Person に関連付けることができます。 表される sourceProperty が 2 以上の基数のリレーションシップを持つ場合、このメソッドは例外をスローします。

使用例

次の例では、AddLink メソッドおよび SetLink メソッドを使用して、リレーションシップを定義するリンクを作成する方法を示します。 この例では、Order_Details オブジェクトのナビゲーション プロパティも明示的に設定されます。

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)
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);
}

関連項目

参照

DataServiceContext クラス

System.Data.Services.Client 名前空間