Freeteo


Pensieri e C#dice di Matteo Raumer

Entity Framework - recuperare il nome della tabella associata all'entita

Ultimamente lavoro praticamente sempre con Entity Framework per tutti i progetti a cui metto mano, ed devo dire che sono pienamente soddisfatto.
I vantaggi sono moltissimi e risaputi, ma se dovessi scegliere un paio di cose veramente indispensabili, sicuramente sceglierei Lambda Expression per filtrare i dati, e il drastico ma veramente drastico abbattimento del tempo di sviluppo dello strato dati.

Ormai grazie a questo pacchetto diciamo pure che mi sono abituato fin troppo bene ...ma un buon sviluppatore sa bene che per quanto un prodotto sia bello e valido per un contesto, solo l'utilizzo nel tempo può dirci quanto sia veramente adattabile alle diverse situazioni...dato che si devono spesso fare acrobazie degne del Cirque du Soleil.

Infatti purtroppo ogni tanto mi capita di dover scrivere alcune query dritte senza usare Entity Framework, andando direttamente via sintassi Sql sul database.
Per casi come questo, magari avendo tutto già bello che configurato su EF, torna utile sapere il nome della tabella da poter usare nelle query che scrivo, anche nell'ottica di restare il più possibile agile.

Per questo ho preferito fare a meno di scrivere i nomi delle tabelle, ma farmi piuttosto un piccolo metodo che va nei metadati del Context, prende la stringa che genera EF (visibile anche in debug) e con Regex recuperare il nome della tabella:

public string GetNomeTabella()
{
   var ctx = GetContext();
  
   ObjectContext
objectContext = ((IObjectContextAdapter)ctx).ObjectContext;
   var x = objectContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.SSpace);
   string sql = objectContext.CreateObjectSet<T>().ToTraceString();   
  
   Regex
regex = new Regex("FROM (?<table>.*) AS");
   Match match = regex.Match(sql);

   return = match.Groups["table"].Value;
}

Il DbContext corrente è dato dal metodo "GetContext()" relativo alle mappature dell'entita che nel mio caso è implementato nel BaseProvider<T> spiegato in questo post, ma ovviamente può essere recuperato come meglio si crede.

Categoria: Tips
mercoledì, 30 apr 2014 Ore. 17.01

Messaggi collegati






  • Views Home Page: 248.627
  • Views Posts: 427.345
  • Views Gallerie: 598.928
  • n° Posts: 163
  • n° Commenti: 148
Anno 2014

Anno 2013

Anno 2012

Anno 2011

Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Anno 2005
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003