2012-04-02 3 views
3

Vor 3,2 bis NHibernate Upgrade, habe ich den folgenden Code für Fluent NHibernate:Wie konfiguriert man NHibernate's Second Level Cache in NHibernate> = 3.2?

OracleClientConfiguration configurer = (OracleClientConfiguration.Oracle10.ShowSql().ConnectionString(c => 
         c.FromConnectionStringWithKey(ConnectionString.Development)) 
         .DefaultSchema("MySchema") 
         .UseReflectionOptimizer() 
      /* Here --> */ .Cache(c => 
           c.ProviderClass<SysCacheProvider>() 
           .UseQueryCache())); 

jedoch die .Cache() Erweiterungsmethode länger in NHibernate 3.2 gefunden wird nicht.

Wie würde ich meinen Cache-Provider einrichten?

Edit: Ich habe auch versucht:

 .ExposeConfiguration(configuration => 
     { 
      configuration.SetProperty(Environment.UseQueryCache, "true"); 
      configuration.SetProperty(Environment.CacheProvider, "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache2"); 
     }); 

Antwort

6

Dies ist ein Auszug aus meiner Konfiguration, den SysCache Provider.

var configuration = new Configuration() 
    .Cache(x => x.UseQueryCache = true) 
configuration.SessionFactory() 
    .Caching.Through<SysCacheProvider>().WithDefaultExpiration(60) 
+1

Dies funktioniert jedoch, NHibernate Profiler sagt "Second Level Cache Put: N (sagen, 44)", während die "Cache Hit Count" 0 sagt. Haben Sie eine Idee, warum Caching nicht funktioniert? – rebelliard

+0

@rebelliard - bist du weiter gekommen, als du herausgefunden hast, warum es nicht funktioniert hat? Es scheint auch nicht für mich zu funktionieren ... –

+0

@Hainesy Ich tat es eigentlich nie. In der Tat, ich habe nur überprüft und ich Rollback mein Projekt auf NH 3.1.x (+ Fluent Hibernate + Sharp Architektur) aus diesem Grund. Ich bin seither nicht mehr hauptsächlich mit C# beschäftigt, daher bin ich mir nicht sicher, was sich in diesem Jahr in Bezug auf dieses Problem geändert hat ... – rebelliard

0

siehe http://www.markhneedham.com/blog/2010/06/16/fluent-nhibernate-and-the-2nd-level-cache/ & https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

Ein häufiger Fehler (es mir passiert ist, wie gut!) Zu begehen, zu vergessen ist oder eine Transaktion weglassen, wenn das Hinzufügen oder ein Objekt/Aggregat ändert zur Datenbank. Wenn wir jetzt auf die Entität/das Aggregat von einer anderen Sitzung zugreifen, wird der Cache der zweiten Ebene nicht bereit sein, uns die zwischengespeicherten Instanzen bereitzustellen, und NHibernate führt einen (unerwarteten Umlauf zur -Datenbank) durch.

Ich habe das gleiche Problem, und googelte für sie viele Male, endlich sah ich dies. Die schlechte Nachricht ist, habe ich versucht, mit Tracesaction und immer noch mit dem Öffnen der 2nd-Level-Cache fehlgeschlagen!