Condividi tramite


Aggiornamento del servizio dati (WCF Data Services)

Quando si utilizza la libreria client di WCF Data Services per utilizzare un feed OData (Open Data Protocol) , la libreria traduce le voci del feed in istanze delle classi del servizio dati client. Queste classi del servizio dati vengono rilevate utilizzando l'elemento DataServiceContext a cui appartiene DataServiceQuery. Il client rileva le modifiche alle entità segnalate utilizzando i metodi su DataServiceContext. Questi metodi consentono al client di rilevare le entità aggiunte ed eliminate, nonché le modifiche apportate ai valori delle proprietà o alle relazioni tra le istanze di entità. Le modifiche rilevate vengono restituite al servizio dati sotto forma di operazioni basate su REST quando si chiama il metodo SaveChanges.

Dd756361.note(it-it,VS.100).gifNota:
Quando si utilizza un'istanza di DataServiceCollection per associare i dati ai controlli, le modifiche apportate ai dati nel controllo associato vengono automaticamente segnalate in DataServiceContext. Per ulteriori informazioni, vedere Associazione di dati a controlli (WCF Data Services).

Aggiunta e modifica delle entità

Quando si utilizza la finestra di dialogo Aggiungi riferimento al servizio in Visual Studio per aggiungere un riferimento a un feed OData , ogni classe del servizio dati client risultante dispone di un metodo Create statico che accetta un parametro per ogni proprietà di entità non nullable. È possibile utilizzare questo metodo per creare istanze delle classi di tipo entità, come illustrato nell'esempio seguente:

' Create the new product.
Dim newProduct = _
    Product.CreateProduct(0, "White Tea - loose", False)
// Create the new product.
Product newProduct =
    Product.CreateProduct(0, "White Tea - loose", false);

Per aggiungere un'istanza di entità, chiamare il metodo AddTo appropriato sulla classe DataServiceContext generata mediante la finestra di dialogo Aggiungi riferimento al servizio, come illustrato nell'esempio seguente:

' Add the new product to the Products entity set.
context.AddToProducts(newProduct)
// Add the new product to the Products entity set.
context.AddToProducts(newProduct);

L'oggetto verrà aggiunto al contesto e inserito nel set di entità corretto. È inoltre possibile chiamare AddObject, ma in questo caso è necessario fornire il nome del set di entità. Se l'entità aggiunta dispone di una o più relazioni con altre entità, sarà possibile utilizzare il metodo AddRelatedObject o uno dei metodi precedenti e definire inoltre in modo esplicito tali collegamenti. Queste operazioni verranno illustrate più avanti in questo argomento.

Per modificare un'istanza di entità esistente, eseguire innanzitutto una query per tale entità, apportare le modifiche desiderate alle proprietà corrispondenti, quindi chiamare il metodo UpdateObject sull'oggetto DataServiceContext per indicare alla libreria client la necessità di inviare un aggiornamento per tale oggetto, come illustrato nell'esempio seguente:

' Mark the customer as updated.
context.UpdateObject(customerToChange)
// Mark the customer as updated.
context.UpdateObject(customerToChange);

Per eliminare un'istanza di entità, chiamare il metodo DeleteObject sull'oggetto DataServiceContext, come illustrato nell'esempio seguente:

' Mark the product for deletion.    
context.DeleteObject(deletedProduct)
// Mark the product for deletion.    
context.DeleteObject(deletedProduct);

Per ulteriori informazioni, vedere Procedura: aggiungere, modificare ed eliminare entità (WCF Data Services).

Collegamento di entità

La libreria client consente di salvare gli aggiornamenti apportati a un'entità senza prima eseguire una query per il caricamento dell'entità in DataServiceContext. Utilizzare il metodo AttachTo per collegare un oggetto esistente a un set di entità specifico nell'oggetto DataServiceContext. Sarà quindi possibile modificare l'oggetto e salvare le modifiche nel servizio dati. Nell'esempio seguente un oggetto cliente modificato in precedenza viene collegato al contesto e viene quindi chiamato il metodo UpdateObject per contrassegnare l'oggetto collegato come Modified prima della chiamata del metodo SaveChanges:

' Attach the existing customer to the context and mark it as updated.
context.AttachTo("Customers", customer)
context.UpdateObject(customer)

' Send updates to the data service.
context.SaveChanges()
// Attach the existing customer to the context and mark it as updated.
context.AttachTo("Customers", customer);
context.UpdateObject(customer);

// Send updates to the data service.
context.SaveChanges();

Al collegamento di oggetti si applicano le considerazioni seguenti:

  • Un oggetto viene collegato nello stato Unchanged.

  • Il collegamento di un oggetto non determina il collegamento degli oggetti correlati all'oggetto collegato.

  • Non è possibile collegare un oggetto se l'entità è già in fase di rilevamento da parte del contesto.

  • L'overload del metodo AttachTo che accetta un parametro etag viene utilizzato quando si collega un oggetto entità ricevuto insieme a un valore eTag. Questo valore eTag verrà quindi utilizzato per il controllo della concorrenza durante il salvataggio delle modifiche nell'oggetto collegato.

Per ulteriori informazioni, vedere Procedura: collegare un'entità esistente a DataServiceContext (WCF Data Services).

Creazione e modifica dei collegamenti delle relazioni

Quando si aggiunge una nuova entità utilizzando il metodo AddObject o il metodo AddTo appropriato della classe DataServiceContext generata tramite la finestra di dialogo Aggiungi riferimento al servizio, le relazioni tra la nuova entità e le entità correlate non vengono definite automaticamente.

È possibile creare e modificare le relazioni tra istanze di entità e fare in modo che tali modifiche vengano apportate nel servizio dati mediante la libreria client. Le relazioni tra entità sono definite come associazioni nel modello e DataServiceContext tiene traccia di ogni relazione come oggetto di collegamento nel contesto. In WCF Data Services sono disponibili i metodi seguenti sulla classe DataServiceContext per creare, modificare ed eliminare questi collegamenti.

Metodo Descrizione

AddRelatedObject

Crea un nuovo collegamento tra due oggetti entità correlati. La chiamata a questo metodo equivale alla chiamata al metodo AddObject e AddLink per creare il nuovo oggetto e definire la relazione a un oggetto esistente.

AddLink

Crea un nuovo collegamento tra due oggetti entità correlati.

SetLink

Aggiorna un collegamento esistente tra due oggetti entità correlati. SetLink è utilizzato anche per eliminare i collegamenti con una cardinalità di tipo zero-o-uno-a-uno (0..1:1) e uno-a-uno (1:1). A tale scopo è possibile impostare l'oggetto correlato su null.

DeleteLink

Contrassegna un collegamento rilevato dal contesto per l'eliminazione quando viene chiamato il metodo SaveChanges. Utilizzare questo metodo quando si elimina un oggetto correlato o si modifica una relazione eliminando prima il collegamento all'oggetto esistente e aggiungendo quindi un collegamento al nuovo oggetto correlato.

AttachLink

Notifica al contesto l'esistenza di un collegamento tra due oggetti entità. Il contesto presuppone che questa relazione esista già nel servizio dati e non effettua alcun tentativo di creare il collegamento durante la chiamata del metodo SaveChanges. Utilizzare questo metodo quando si collegano oggetti a un contesto e si ha inoltre la necessità di creare il collegamento tra l'oggetto e il contesto. Se si sta definendo una nuova relazione, è invece necessario utilizzare AddLink.

DetachLink

Interrompe il rilevamento del collegamento specificato nel contesto. Questo metodo è utilizzato per eliminare relazioni uno-a-molti (*:*). Per i collegamenti delle relazioni con una cardinalità di uno, è necessario utilizzare invece SetLink.

Nell'esempio seguente viene illustrato come utilizzare il metodo AddRelatedObject per aggiungere un nuovo oggetto Order_Detail correlato a un'entità Orders esistente. Dal momento che il nuovo oggetto Order_Details viene ora rilevato da DataServiceContext, la relazione dell'oggetto Order_Details aggiunto all'entità Products esistente è definita tramite la chiamata al metodo AddLink:

' Add the new item with a link to the related order.
context.AddRelatedObject(order, "Order_Details", newItem)

' Since the item is now tracked by the context,
' set just the link to the related product.
context.AddLink(selectedProduct, "Order_Details", newItem)
// Add the new item with a link to the related order.
context.AddRelatedObject(order, "Order_Details", newItem);

// Since the item is now tracked by the context,
// set just the link to the related product.
context.AddLink(selectedProduct, "Order_Details", newItem);

Mentre il metodo AddLink definisce i collegamenti che devono essere creati nel servizio dati, per fare in modo che questi collegamenti vengano riflessi negli oggetti inclusi nel contesto, è inoltre necessario impostare le proprietà di navigazione sugli oggetti stessi. Nell'esempio precedente le proprietà di navigazione devono essere impostate nel modo seguente:

' Add the new order detail to the collection, and
' set the reference to the product.
order.Order_Details.Add(newItem)
newItem.Order = order
newItem.Product = selectedProduct
// Add the new order detail to the collection, and
// set the reference to the product.
order.Order_Details.Add(newItem);
newItem.Order = order;
newItem.Product = selectedProduct;

Per ulteriori informazioni, vedere Procedura: definire relazioni tra entità (WCF Data Services).

Salvataggio delle modifiche

Le modifiche vengono rilevate nell'istanza di DataServiceContext, ma non vengono inviate immediatamente al server. Dopo aver apportato le modifiche necessarie per un'attività specificata, chiamare SaveChanges per inviare tutte le modifiche al servizio dati. Per ulteriori informazioni, vedere Gestione del contesto del servizio dati (WCF Data Services). È inoltre possibile salvare le modifiche in modo asincrono utilizzando i metodi BeginSaveChanges e EndSaveChanges. Per ulteriori informazioni, vedere Operazioni asincrone (WCF Data Services).

Vedere anche

Concetti

Esecuzione di query sul servizio dati (WCF Data Services)
Operazioni asincrone (WCF Data Services)
Invio in batch di operazioni (WCF Data Services)
Materializzazione di oggetti (WCF Data Services)
Gestione del contesto del servizio dati (WCF Data Services)

Altre risorse

Libreria client WCF Data Services