2011-01-31 72 views
7

我有一個使用NHibernate的MVC3應用程序。一切進展順利,直到我開始嘗試添加二級緩存。瀏覽網絡幾個小時後,我終於找到了我認爲是正確的DLL(NHibernate.Caches.SysCache2.dll)並將它添加到我的項目中。在MVC應用程序中配置NHibernate二級緩存

但是,我找不到任何幫助來配置它與MVC應用程序。所有的例子都提到有一個App.config文件(我認爲這是用於Web窗體)。我是一位學習.Net的Java開發人員,所以我不太熟悉如何操縱一切。

有人能指出我正確的方向。我使用的是xml hibernate(hbm)文件。

謝謝。

回答

9

我使用的是MVC3和NHibernate.Caches.SysCache.dll這樣的二級緩存...

1,添加配置節web.config文件中這樣

<configSections> 
    <section name="syscache" type="NHibernate.Caches.SysCache.SysCacheSectionHandler, NHibernate.Caches.SysCache, Version=3.0.0.4000, Culture=neutral, PublicKeyToken=6876f2ea66c9f443"/> 
</configSections> 

添加syscache部分你的web.config在你的配置部分是這樣的:在我的hibernate.cfg.xml文件

<syscache> 
    <cache region="SomeCustomNameRegion" expiration="86400" priority="5" /> 
</syscache> 

我有以下特性補充說:

<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property> 
<property name="cache.use_query_cache">true</property> 
<property name="cache.use_second_level_cache">true</property> 

我使用FluentNhibernate創建我的映射,並添加此支持緩存:

public CustomerClassMap() 
{ 
    Cache.NonStrictReadWrite(); 
    Id(x => x.Id); 
    Map(x => x.Name); 
    //... more properties 
} 

然後在我的數據訪問代碼,我有類似這樣的,我想緩存查詢的東西:

public IEnumerable<Customer> GetAllCached() 
{ 
    return Session.CreateCriteria(typeof(Customer)) 
      .SetCacheable(true) 
      .SetCacheRegion("SomeCustomNameRegion") 
      .SetCacheMode(CacheMode.Normal) 
      .AddOrder(Order.Desc("CreateDate")) 
      .List<Customer>(); 
} 

下面是一些有用的鏈接,以瞭解更多細節。沒有什麼特別的關於MVC3的,你需要擔心的是,就我所知,早期版本的NHibernate大多數都沒有改變。

http://www.klopfenstein.net/lorenz.aspx/using-syscache-as-secondary-cache-in-nhibernate

http://blog.symbiotic-development.com/2008/02/27/more-configuring-nhibernate-caches/

+0

大 - 感謝。完美工作。我仍然在web.config中爲syscache元素獲取了一些架構消息,但它們只是警告。再次感謝。 – Matt 2011-02-01 09:47:09