2011-01-31 31 views
7

Tôi có ứng dụng MVC3 đang sử dụng NHibernate. Tất cả đều diễn ra tốt đẹp cho đến khi tôi bắt đầu thử và thêm bộ nhớ đệm cấp hai. Sau khi duyệt web trong một vài giờ cuối cùng tôi đã tìm thấy những gì tôi nghĩ là dll phải (NHibernate.Caches.SysCache2.dll) và đã thêm nó vào dự án của tôi.Định cấu hình bộ đệm ẩn cấp độ NHibernate trong ứng dụng MVC

Tuy nhiên, tôi không thể tìm thấy bất kỳ trợ giúp nào để định cấu hình ứng dụng đó bằng ứng dụng MVC. Tất cả các ví dụ đề cập đến việc có một tập tin App.config (tôi đoán đây là cho các hình thức Web). Tôi là một nhà phát triển Java đang học .Net vì vậy tôi không quen thuộc với cách để sắp xếp mọi thứ.

Ai đó có thể chỉ cho tôi đúng hướng. Tôi đang sử dụng file xml hibernate (hbm).

Cảm ơn.

Trả lời

9

Tôi đang sử dụng bộ nhớ đệm cấp 2 với MVC3 và NHibernate.Caches.SysCache.dll như thế này ...

1st, thêm một phần cấu hình để file web.config của bạn như thế này

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

thêm một phần syscache vào web.config của bạn trong phần cấu hình của bạn như thế này:

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

trong file hibernate.cfg.xml của tôi có các thuộc tính sau thêm:

<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> 

Tôi đang sử dụng FluentNhibernate để tạo ra các ánh xạ của tôi và thêm này để hỗ trợ bộ nhớ đệm:

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

Và sau đó trong mã truy cập dữ liệu của tôi, tôi có một cái gì đó tương tự như sau cho các truy vấn mà tôi muốn được lưu trữ :

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

Dưới đây là một số liên kết hữu ích để xem chi tiết hơn một chút. Không có gì cụ thể về MVC3 mà bạn cần phải lo lắng về, và hầu hết là không thay đổi từ các phiên bản trước của NHibernate theo như tôi có thể nói.

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

lớn - nhờ cho điều đó. Làm việc hoàn hảo. Tôi vẫn nhận được một số thông điệp giản đồ trong web.config cho phần tử syscache nhưng chúng chỉ là cảnh báo. Cảm ơn một lần nữa. – Matt

+1

Có lẽ đáng để chỉ ra rằng nếu bạn sử dụng SysCache2 thì bạn phải đặt tên phần tử cấu hình là "syscache2" thay vì "syscache". –

Các vấn đề liên quan