DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

lunedì 16 febbraio 2009

[Entity Framework] EntityClient

EntityClient (namespace System.Data.EntityClient) è un provider che l’EntityFramework mette a disposizione per accedere ai dati descritti da unEntity Data Model (EDM), ovvero una sorta di gateway per query sul modello concettuale e non sulla relativa rappresentazione fisica. 
Le query invocabili dall’ EntityClient vanno dunque scritte in un dialetto di SQL chiamato “EntitySQL”: a runtime, la pipeline compila il testo EntitySQL in un command tree che viene passato al data provider sottostante per la generazione del comando SQL nativo. Dietro le quinte, infatti, EntityClient utilizza i provider ADO.NET per accedere alle sorgenti dati ( es. SqlClient per SQL Server ).  L’aspetto interessante è che i risultati di una query EntitySQL possono non limitarsi a semplici tabelle, bensì possono contenere anche gerarchie complesse.
In generale, l’uso di EntityClient è consigliabile in applicazioni model-based che richiedono particolari performance nella misura in cui non si necessita della materializzazione delle Entities a partire da resultset, bensì di un IDataReader consumabile direttamente magari per materializzazioni di oggetti specifici.
In qualità di provider ADO.NET a tutti gli effetti, EntityClient segue i soliti pattern Connection-Command-Parameter-DataReader, etc. dove le suddette classi sono precedute dal prefisso “Entity”. Ecco un esempio di paginazione dati usando EntityClient:

public List<string> GetProductNames(int pageNumber, int pageSize)
{
 
List<string> productNames = new List<string>();
 
using (EntityConnection conn = new EntityConnection("name=NorthwindEntities"))
 
{
   
string cmdText = string.Format("SELECT VALUE v FROM NorthwindEntities.Products AS v ORDER BY v.ProductName SKIP {0} LIMIT {1}", (pageNumber * pageSize).ToString(), pageSize);                  

   
using (EntityCommand cmd = new EntityCommand(cmdText, conn))
   
{
     
conn.Open();    
     
using(EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))               
     
{
       
while (reader.Read()) productNames.Add(reader["ProductName"].ToString());
     
}                                                
   
}
  
}
  
return productNames;
}

 

Technorati Tag:

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (1) |

Powered by:
Powered By Subtext Powered By ASP.NET