Warum speichert Entity Framework 6.x keine Ergebnisse zwischen?

Warum speichert Entity Framework 6.x keine Ergebnisse zwischen?

Was @emcas88 zu sagen versucht, ist, dass EF den Cache nur überprüft, wenn Sie den .Find verwenden Methode auf DbSet .

Mit .Single , .First , .Where , usw. werden die Ergebnisse nicht zwischenspeichern, es sei denn, Sie verwenden das Zwischenspeichern der zweiten Ebene.


Dies liegt daran, dass die Implementierung der Extensor-Methoden die Find-Methode des Kontexts verwendet

contextName.YourTableName.Find()

um zuerst den Cache zu verifizieren. Hoffe es hilft.


Manchmal verwende ich meine Erweiterungsmethode:

using System.Linq;
using System.Linq.Expressions;

namespace System.Data.Entity
{
    public static class DbSetExtensions
    {
        public static TEntity FirstOrDefaultCache<TEntity>(this DbSet<TEntity> queryable, Expression<Func<TEntity, bool>> condition) 
            where TEntity : class
        {
            return queryable
                .Local.FirstOrDefault(condition.Compile()) // find in local cache
                   ?? queryable.FirstOrDefault(condition); // if local cache returns null check the db
        }
    }
}

Verwendung:

db.Invoices.FirstOrDefaultCache(x => x.CustomerName == "Some name");

Sie können FirstOrDefault auch durch SingleOrDetfault ersetzen.