Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1711, comments - 2324, trackbacks - 356

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Microsoft MVP

My MVP Profile

My MVP Corner Page

Il mio libro su VB2012!

Il mio nuovo libro su Visual Basic 2012 E' uscito il mio libro "Visual Basic 2012 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su VS LightSwitch!

Il mio nuovo libro su Visual Studio LightSwitch E' uscito il mio libro "Visual Studio LightSwitch Unleashed". Clicca sulla copertina per info!

Visual Basic Tips & Tricks Team Member

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!


Guarda i miei webcast MSDN

Altri spazi

CodePlex download Scarica i miei progetti open-source su CodePlex!

Cerca nel blog



Seguimi su Twitter!

Article Categories

Archives

Post Categories

Image Galleries

.NET Framework

Back to basics

Blogroll

Help 1.x e 2.0

Microsoft & MSDN

Setup & Deployment

Visual Basic .NET e 2005

ADO.NET Data Services: eliminazione di entità con associazioni

Sebbene questo sia probabilmente un discorso applicabile, in linea più generale all'Entity Framework, questo post trae origine da una situazione specifica negli ADO.NET Data Services. Nei vari articoli su VB T&T abbiamo visto come eliminare delle entità dalla nostra sorgente dati facendo inviare dalle applicazioni client delle richieste di tipo Http Delete verso il servizio, che poi si occupa dell'eliminazione vera e propria, sicuramente nei confronti dell'Entity Data Model e poi nel database quando si richiama il metodo DataService.SaveChanges.

Si potrebbero avere dei problemi nell'eliminare entità che hanno associate altre entità (caso molto comune, fra l'altro); facendo l'esempio del database Northwind, se vado a rimuovere un'entità di tipo Order avrei automaticamente necessità di rimuovere anche gli Order_Details, ma tale richiesta solleverà con grande probabilità una DataServiceRequestException, poiché Northwind rifiuta di eliminare l'entità associata.

Come possiamo fare, quindi? Dobbiamo intervenire sulla regola di eliminazione all'interno del database. Nel caso dei database SQL Server, possiamo ricorrere a SQL Server Management Studio. Apriamo il database di interesse, ci spostiamo nella sua struttura fino ad espandere la tabella che riceverà le richieste Delete tramite Data Service, quindi andiamo ad aprire la sottocartela Keys. Selezioniamo la foreign key di nostro interesse (nell'esempio la FK_Order_Details_Orders) e facciamo clic destro:

Selezioniamo il comando Modify per aprire la finestra Foreign Key Relationships, all'interno della quale dovremo andare a modificare la regola di Delete impostandola su Cascade, come in figura:

Così facendo le richieste di eliminazione di un ordine faranno sì che vengano eliminati anche i dettagli associati. Fatto questo, si possono salvare le modifiche al database. Questo risolve un problema, ma non è tutto.

Può capitare che, nelle relazioni one-to-many, sia possibile aggiungere un dato nella parte "one" senza che vi sia un corrispondente elemento nella parte "many". Esempio, aggiungo un nuovo cliente ma non ordini correlati, poiché ciascun Order prevede che la CustomerID possa essere nulla. Questo può creare una serie di problematiche a run-time, pertanto si può ricorrere alla forzatura delle foreign key al fine di accertarsi che a ciascun "one" corrispondano dei "many". In Entity Framework questo può essere ottenuto a livello di designer. Per esempio, considerate la seguente relazione relativa agli EntitySet Customers - Orders:

Facciamo clic destro sulla relazione (quella cerchiata in rosso) ed attiviamo la finestra delle proprietà. Modifichiamo la proprietà Multiplicity per la Customers da Zero-One a One:

In questo modo risolveremo anche il secondo problema, ossia impedire che a un Customer non corrisponda alcun Order.

Alessandro

Print | posted on sabato 11 aprile 2009 16:01 | Filed Under [ WCF Data Services/WCF RIA Services/OData ]

Feedback

Gravatar

# Community Links: Aprile, Visual Basic tips & tricks

La community Visual Basic Tips & Tricks ci segnala questi link alle loro recenti pubblicazioni. Potete
20/04/2009 13:41 | Il blog del team MSDN Italia

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 2 and 7 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET