2010-05-07 68 views
1

我使用流暢的nhibernate與asp.net mvc,並且在對數據庫進行查詢時沒有看到任何緩存。我目前沒有使用二級緩存實現。流利nhibernate不緩存在asp.net中的查詢mvc

我應該看到查詢被緩存而沒有配置進程外L2緩存嗎?

映射是這樣的:

Table("ApplicationCategories"); 
Not.LazyLoad(); 
Cache.ReadWrite().IncludeAll(); 
Id(x => x.Id); 
Map(x => x.Name).Not.Nullable(); 
Map(x => x.Description).Nullable(); 

示例標準:

return session 
      .CreateCriteria<ApplicationCategory>() 
      .Add(Restrictions.Eq("Name", _name)) 
      .SetCacheable(true); 

每次我提出一個要求爲應用程序cateogry的名字被打的數據庫是這一預期的行爲嗎?

+0

你打開查詢緩存嗎?如果是,什麼是配置? – Paco 2010-05-07 17:23:02

回答

3

一級緩存僅在會話級別,一旦您將緩存與該會話配置在一起。我假設,就像大多數網絡應用程序一樣,您將按照請求進行會話處理;在這種情況下,每次訪問數據庫是完全正常的。

當您要在同一會話中執行相同(或類似)查詢時,1級緩存最有用,在這種情況下,您只會看到對數據庫的一次調用。

+0

DOH! - 是啊,現在完全有道理... – AwkwardCoder 2010-05-07 14:56:20

1

您需要啓用二級緩存和查詢緩存才能緩存查詢。

這有沒有*用於「級別1」緩存(會話標識映射)。

如果添加以下屬性到你的NHibernate的配置文件:

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

...數據庫將不會在隨後的電話打。