Ho una tabella:Quando dovrei usare CompiledQuery?
-- Tag
ID | Name
-----------
1 | c#
2 | linq
3 | entity-framework
ho una classe che avrà i seguenti metodi:
IEnumerable<Tag> GetAll();
IEnumerable<Tag> GetByName();
Dovrei usare una query compilata in questo caso?
static readonly Func<Entities, IEnumerable<Tag>> AllTags =
CompiledQuery.Compile<Entities, IEnumerable<Tag>>
(
e => e.Tags
);
Poi il mio metodo GetByName
sarebbe:
IEnumerable<Tag> GetByName(string name)
{
using (var db = new Entities())
{
return AllTags(db).Where(t => t.Name.Contains(name)).ToList();
}
}
che genera un SELECT ID, Name FROM Tag
ed eseguire Where
sul codice. O dovrei evitare CompiledQuery
in questo caso?
Fondamentalmente voglio sapere quando dovrei usare le query compilate. Inoltre, su un sito Web vengono compilati una sola volta per l'intera applicazione?
L'esempio fornito non funzionerà in fase di esecuzione (è necessario passare il contesto e non è possibile utilizzare "Func <>" senza "Expression <>". Inoltre, è necessario comporre la query ('Where (t = > ... ')" decompila "il risultato, ma la domanda è valida –
In .net 4.5 verrà eseguita automaticamente Vedere" Entity Framework 5: Controllo della compilazione automatica delle query "http://blogs.msdn.com/ b/stuartleeks/archive/2012/06/12/entity-framework-5-controlling-automatic-query-compilation.aspx) –