Condividi tramite


Metodo DataServiceContext.SetLink

Notifica a DataServiceContext l'esistenza di un nuovo collegamento tra gli oggetti specificati e la rappresentazione del collegamento da parte della proprietà specificata dal parametro sourceProperty.

Spazio dei nomi  System.Data.Services.Client
Assembly:  Microsoft.Data.Services.Client (in Microsoft.Data.Services.Client.dll)

Sintassi

'Dichiarazione
Public Sub SetLink ( _
    source As Object, _
    sourceProperty As String, _
    target As Object _
)
'Utilizzo
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
)

Parametri

  • source
    Tipo: System.Object
    Oggetto di origine per il nuovo collegamento.
  • sourceProperty
    Tipo: System.String
    Proprietà nell'oggetto di origine che identifica l'oggetto di destinazione del nuovo collegamento.
  • target
    Tipo: System.Object
    Oggetto figlio coinvolto nel nuovo collegamento che deve essere inizializzato chiamando questo metodo.L'oggetto di destinazione deve essere un sottotipo del tipo identificato dal parametro sourceProperty.Se target è impostato su Null, la chiamata rappresenta un'operazione di eliminazione collegamento.

Eccezioni

Eccezione Condizione
ArgumentNullException

Se source, sourceProperty o target è Null.

InvalidOperationException

Se il collegamento specificato esiste già.

-oppure-

Se gli oggetti forniti come source o target sono in uno stato Detached o Deleted.

-oppure-

Se sourceProperty non è una proprietà di navigazione che definisce un riferimento a un singolo oggetto correlato.

Osservazioni

Viene creato un nuovo collegamento in uno stato Added. DataServiceContext aggiunge questo nuovo collegamento al set di collegamenti appena creati da inviare al servizio dati alla chiamata successiva a SaveChanges. Per ulteriori informazioni, vedere Aggiornamento del servizio dati (WCF Data Services).

Se l'argomento di destinazione è Null, il collegamento rappresentato da sourceProperty deve essere rimosso o eliminato (il collegamento viene modificato nello stato Deleted).

Questo metodo supporta solo l'aggiunta di collegamenti a relazioni con molteplicità = 1 (la proprietà di origine è un riferimento all'oggetto). Se ad esempio una classe Person è correlata a un'altra classe Person tramite una proprietà Friend, questa chiamata può essere utilizzata per correlare Person a Person. Questo metodo genererà un'eccezione se l'oggetto sourceProperty rappresentato dispone di più di una relazione di cardinalità pari a uno.

Esempi

Nell'esempio seguente viene mostrato come utilizzare i metodi AddLink e SetLink per creare collegamenti che definiscono relazioni. In questo esempio le proprietà di navigazione sull'oggetto Order_Details vengono impostate anche in modo esplicito.

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

Vedere anche

Riferimento

DataServiceContext Classe

Spazio dei nomi System.Data.Services.Client