2012-12-04 23 views
13

Capisco che EF 5 memorizzerà automaticamente le query nella cache, ma lo fa per contesto o in generale? Stiamo utilizzando MVC e stiamo eseguendo il wrapping delle chiamate in un blocco using per disporre di dbcontext. Per esempio:Query memorizzate nella cache con Entity Framework 5

public class Employee 
{ 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public int ID {get; set;} 
} 

public class EmployeeQueryByFirstName : IQueryObject<Employee> 
{ 
    private string _firstName; 

    public void Set(string FirstName) 
    { 
     _firstName = FirstName; 
    } 

    public Expression<Func<Employee,bool>> AsExpression() 
    { 
     return (e=>e.FirstName == this._firstName); 
    } 
} 

public class RepoExcerpt 
{ 
    public TEntity Find<TEntity>(IQueryObject<TEntity> queryObject) 
     where TEntity : class 
    { 
     using (var conn = ServiceLocator.IOC.Resolve<IDbContext>()) 
     { 
      var query = (from q in conn.Set<TEntity>() 
         select q); 
      query = query.Where(queryObject.AsExpression()); 
      return query.FirstOrDefault(); 
     } 
    } 
} 

La prossima volta che chiamiamo Find sul repository, si Ef 5 hanno una versione cache di questa query, o sarà andato perché saremo ottenere un nuovo DbContext? E se voglio query nella cache, dovrò gestirmi?

risposta

6

Le query vengono memorizzate nella cache in modo completo in modo da poter creare e smaltire in modo sicuro l'istanza DbContext per ogni richiesta. Questo è il mio approccio preferenziale comunque.
È possibile trovare la documentazione Microsoft here - consultare la sezione 3.2 Caching del piano di query.

3

Da Microsoft:

Per impostazione predefinita, il piano di query nella cache è attivata per le query Entity SQL, se eseguito attraverso un EntityCommand o tramite un ObjectQuery. E 'anche attivata per impostazione predefinita per LINQ to Entities query in Entity Framework su .NET 4.5, e in Entity Framework 6

E no, non c'è bisogno di tenere sullo stesso contesto per il caching per lavoro. Si noti che solo la query stessa (ovvero l'SQL che viene compilato tramite Entity Framework) viene memorizzata nella cache e per impostazione predefinita questa query (memorizzata nella cache) verrà comunque eseguita sul DB ogni volta che viene richiesto il dato.

+0

Il motore deve ancora attraversare l'espressione per assicurarsi che si tratti della stessa query? –

Problemi correlati