Alessandro Del Sole's Blog

/* A programming space about Microsoft® .NET® */

  Home :: Contact :: Syndication  :: Login
  1204 Posts :: 64 Stories :: 1555 Comments :: 251 Trackbacks

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 VB2010!

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

Visual Basic Tips & Tricks Team Member

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Windows Live Alerts

Vsi Builder 2008

Il mio tool per VS 2005/2008 Scarica Vsi Builder, il mio tool per Visual Studio 2005/2008!

Aggiungimi al Social MSDN!

Dove vivo

Contattami su Messenger


Grab this badge here!

Guarda i miei webcast MSDN

CyberInstaller Beta Tester

Scarica il nuovo CIS 2009!!

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

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

posted on Saturday, April 11, 2009 1:01 PM

Feedback

# Community Links: Aprile, Visual Basic tips & tricks 4/20/2009 10:41 AM Il blog del team MSDN Italia
La community Visual Basic Tips & Tricks ci segnala questi link alle loro recenti pubblicazioni. Potete

Post Feedback

Title:
Name:
Url:
Comments: 
Codice di sicurezza
Protected by FormShield