DataServiceContext.SetLink(Object, String, Object) Metoda

Definice

DataServiceContext Upozorní, že mezi zadanými objekty existuje nové propojení a že propojení je reprezentováno vlastností určenou parametremsourceProperty.

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)

Parametry

source
Object

Zdrojový objekt pro nový odkaz.

sourceProperty
String

Vlastnost zdrojového objektu, který identifikuje cílový objekt nového propojení.

target
Object

Podřízený objekt zahrnutý do nového propojení, který má být inicializován voláním této metody. Cílový objekt musí být podtyp typu identifikovaného parametrem sourceProperty . Pokud target je nastavena na hodnotu null, volání představuje operaci odstranění propojení.

Výjimky

Pokud sourcesourceProperty hodnotu null nebo target má hodnotu null.

Zadaný odkaz již existuje.

nebo

Objekty zadané jako source nebo target jsou ve stavu nebo Detached ve Deleted stavu.

nebo

sourceProperty není navigační vlastnost, která definuje odkaz na jeden související objekt.

Příklady

Následující příklad ukazuje, jak používat AddLink a SetLink metody k vytvoření odkazů, které definují relace. V tomto příkladu jsou také explicitně nastaveny navigační vlastnosti objektu 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)

Poznámky

Ve stavu se vytvoří Added nový odkaz. Přidá DataServiceContext tento nový odkaz na sadu nově vytvořených odkazů, které se mají odeslat do datové služby při příštím volání SaveChanges.

Pokud je cílový argument null, odkaz reprezentovaný sourceProperty by měl být odebrán nebo odstraněn (odkaz se přesune do Deleted stavu).

Propojení jsou jednosměrné relace. Pokud existuje zpětný ukazatel označující dvoucestné přidružení, měla by být tato metoda znovu volána, aby se oznámilo DataServiceContext druhé propojení.

Tato metoda podporuje pouze přidávání odkazů na relace s násobností = 1 (zdrojová vlastnost je odkaz na objekt). Pokud například třída Person souvisí s jinou PersonFriend vlastností, lze toto volání použít k relaci Person s Person. Tato metoda vyvolá výjimku, pokud sourceProperty má reprezentovaný vztah kardinality více než jedna.

Platí pro