Ich verstehe, dass EF 5 die Abfragen automatisch zwischenspeichert, aber macht es das pro Kontext oder insgesamt? Wir verwenden MVC und wickeln die Aufrufe in einem using-Block ab, um den dbcontext zu entfernen. Zum Beispiel:Zwischengespeicherte Abfragen mit 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();
}
}
}
Das nächste Mal, wenn wir Find
auf dem Repository aufrufen, wird EF 5 eine im Cache gespeicherte Version dieser Abfrage, oder wird es verschwunden sein, weil wir ein neues DbContext bekommen wird? Und wenn ich zwischengespeicherte Abfragen möchte, muss ich damit umgehen?
Muss die Engine den Ausdruck noch durchlaufen, um sicherzustellen, dass es sich um dieselbe Abfrage handelt? –