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 的类型子类型。 如果 target 设置为 null,则调用表示删除链接操作。

例外

source当或sourceProperty为 null 时target

指定的链接已存在。

-或-

作为source或处于targetDetached处于状态Deleted提供的对象。

-或-

sourceProperty 不是定义对单个相关对象的引用的导航属性。

示例

以下示例演示如何使用 AddLinkSetLink 方法创建定义关系的链接。 在此示例中,还会显式设置对象上的 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 第二个链接

此方法仅支持将链接添加到具有多重性 = 1 的关系(源属性是对象引用)。 例如,如果类与属性的另一个类Person相关,则此调用可用于关联。PersonFriendPersonPerson 如果 sourceProperty 表示的具有多个基数关系,则此方法将引发异常。

适用于