Entity Framework

giovedì 05 marzo 2015 - 16.40

digisam Profilo | Newbie

Ciao a tutti

devo realizzare un webservice in asp.net accessibile da android.

Ho pensato di utilizzare per interfacciarmi con il db sql server l'entity framework. Ho mappato tutte le relazioni tra le tabelle e generato il modello edmx in visual studio.

Ho fatto un po di prove e ho notato che quando vado a richiamare o a fare una query da codice mi restituisce il record e in piu le tutti i record delle tabelle collegate come proprietà.

Il dubbio che mi viene se io voglio ricavare tutti i record da una tabella ad esempio "tipo" non mi serve che ogni classe della list mi vengano valorizzati anche i figli della tabella ad esempio "clienti".

In questi casi c'è un modo per risolvere?? o uso male io entity framework???

0v3rCl0ck Profilo | Guru

>Ciao a tutti
>

ciao

>devo realizzare un webservice in asp.net accessibile da android.
>
>Ho pensato di utilizzare per interfacciarmi con il db sql server
>l'entity framework.

ottimo

>Ho mappato tutte le relazioni tra le tabelle
>e generato il modello edmx in visual studio.

nooooooo code-first rulezzz!

Code First to a New Database: http://msdn.microsoft.com/en-us/data/jj193542

Code First to an Existing Database: http://msdn.microsoft.com/en-us/data/jj200620

se devi partire da un database esistente ti consiglio vivamente questa estensione visual studio per la generazione della configurazione code-first: http://efreversepoco.codeplex.com/ ma va benone anche quello integrato di visual studio come spiegato in msdn (Code First to an Existing Database).

>
>Ho fatto un po di prove e ho notato che quando vado a richiamare
>o a fare una query da codice mi restituisce il record e in piu
>le tutti i record delle tabelle collegate come proprietà.

solo perchè le vai a "stuzzicare"

di default entity abilita il lazy loading per le proprietà di navigazione definite come virtual, cosa che immagino faccia generando il codice dal modello edmx (io ho iniziato ad usare EF solo quando hanno introdotto code-first, beato me!), quindi ti carica quelle proprietà se le "tocchi" durante la query, o anche dopo la query, semplicemente cliccando su "result view" in debug, oppure ciclando una collezione o cercando di accedere ad un padre con l'apposita proprietà di navigazione.

per accertarti di questo puoi fare una traccia su sql, o direttamente controllare in debug la window di Intellisense in visual studio, che ti mostra tutte le query che vengono eseguite, o ancora loggare configurando un logger direttamente in console "context.Database.Log = Console.Write; " oppure con uno degli altri metodi di logging: http://msdn.microsoft.com/en-us/data/dn469464

>
>Il dubbio che mi viene se io voglio ricavare tutti i record da
>una tabella ad esempio "tipo" non mi serve che ogni classe della
>list mi vengano valorizzati anche i figli della tabella ad esempio
>"clienti".
>
>In questi casi c'è un modo per risolvere?? o uso male io entity
>framework???

semplicemente non andare a stuzzicare le proprietà di navigazione che non ti interessano e vedrai che la query verrà eseguita solo per l'entità "tipo".

al contrario se invece vuoi evitare di eseguire ulteriori query per accedere ai figli, perchè tanto sai che ci accederai sicuramente, ti può ritornare utile il metodo Include() di EF, che ti permette appunto di caricare con una sola query anche le relazioni, vedi: http://msdn.microsoft.com/en-us/data/jj574232



Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5