在MVC应用程序中配置NHibernate二级缓存

Mat*_*att 7 nhibernate asp.net-mvc caching

我有一个使用NHibernate的MVC3应用程序.一切顺利,直到我开始尝试添加二级缓存.浏览网页几个小时后,我终于找到了我认为正确的dll(NHibernate.Caches.SysCache2.dll)并将其添加到我的项目中.

但是,我找不到使用MVC应用程序配置它的任何帮助.所有示例都指的是有一个App.config文件(我认为这是用于Web窗体).我是一名正在学习.Net的Java开发人员,因此我对如何安装所有内容并不熟悉.

有人能指出我正确的方向.我正在使用xml hibernate(hbm)文件.

谢谢.

Chr*_*way 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>
Run Code Online (Sandbox Code Playgroud)

在配置部分下的web.config中添加一个syscache部分,如下所示:

<syscache>
    <cache region="SomeCustomNameRegion" expiration="86400" priority="5" />
</syscache>
Run Code Online (Sandbox Code Playgroud)

在我的hibernate.cfg.xml文件中,我添加了以下属性:

<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>
Run Code Online (Sandbox Code Playgroud)

我正在使用FluentNhibernate来创建我的映射并添加它以支持缓存:

public CustomerClassMap()
{
    Cache.NonStrictReadWrite();
    Id(x => x.Id);
    Map(x => x.Name);
    //... more properties
}
Run Code Online (Sandbox Code Playgroud)

然后在我的数据访问代码中,对于我想要缓存的查询,我有类似的东西:

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

以下是一些有用的链接,可以了解更多细节.你需要担心的是没有关于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/