DataServiceContext.SetLink(Object, String, Object) Metod

Definition

Meddelar DataServiceContext att det finns en ny länk mellan de angivna objekten och att länken representeras av egenskapen som anges av parametern 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)

Parametrar

source
Object

Källobjektet för den nya länken.

sourceProperty
String

Egenskapen för källobjektet som identifierar målobjektet för den nya länken.

target
Object

Det underordnade objektet som ingår i den nya länken som ska initieras genom att anropa den här metoden. Målobjektet måste vara en undertyp av den typ som identifieras av parametern sourceProperty . Om target är inställt på null representerar anropet en borttagningslänkåtgärd.

Undantag

När source, sourceProperty eller target är null.

Den angivna länken finns redan.

-eller-

Objekten som anges som source eller target är i Detached tillståndet eller Deleted .

-eller-

sourceProperty är inte en navigeringsegenskap som definierar en referens till ett enda relaterat objekt.

Exempel

I följande exempel visas hur du använder AddLink metoderna och SetLink för att skapa länkar som definierar relationer. I det här exemplet anges även navigeringsegenskaperna för Order_Details objektet uttryckligen.

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)

Kommentarer

En ny länk skapas i tillståndet Added . DataServiceContext Lägger till den här nya länken till uppsättningen nyligen skapade länkar som ska skickas till datatjänsten vid nästa anrop till SaveChanges.

Om målargumentet är null ska länken som representeras av sourceProperty tas bort eller tas bort (länken flyttas till tillståndet Deleted ).

Länkar är enkelriktade relationer. Om det finns en bakåtpekare som anger en tvåvägsassociation bör den här metoden anropas igen för att meddela om DataServiceContext den andra länken

Den här metoden stöder endast att lägga till länkar till relationer med multiplicitet = 1 (källegenskapen är en objektreferens). Om en klass Person till exempel är relaterad till en annan Person av en Friend egenskap kan det här anropet användas för att relatera Person till Person. Den här metoden utlöser ett undantag om den sourceProperty representerade har en kardinalitetsrelation som är mer än en.

Gäller för