Chúng tôi sử dụng NHibernate 4 trong ứng dụng asp.net mvc 4 (.net 4) của chúng tôi. Theo như tôi có thể nói với hành vi của NHibernate 4 đã thay đổi một chút khi nói đến bộ nhớ đệm cấp độ thứ hai.NHibernate 4: Sử dụng bộ nhớ cache cấp thứ hai cho bộ sưu tập trẻ em tải chậm
Các hành vi sau đây dường như đã thay đổi (hãy sửa lại cho tôi nếu tôi sai):
- Có không còn là một giao dịch cần thiết khi sử dụng mức độ thứ hai bộ nhớ cache
- Khi tôi thực hiện một truy vấn như (Hibsession Ở đây (x => x.Name == "x"). ToList()), sau đó nó sẽ truy vấn cho thực thể toàn bộ. Trong các phiên bản trước của NHibernate - nếu tôi nhớ chính xác - chỉ có id của thực thể sẽ được truy lục.
Dường như với tôi rằng mức độ thứ hai chỉ áp dụng trong các trường hợp sau đây:
using (var hibSession = SessionFactory.OpenSession())
{
// Second level cache working
var entity = hibSession.Get<ChachedEntity>(7); // second level cache working
var parent = entity.ParentElement; // second level cache working because n:1
// Probably working (not tested)
var elements = hibSession.Query<ChachedEntity>().Cacheable().Take(30).ToList(); // guessed behaviour: query-cache selects id's and then then uses second level cache
// second level cache NOT Working
var children = entity.ChildCollectionWithCachableEntities; // second level cache NOT working because 1:n (!!)
}
câu hỏi của tôi bây giờ là:
- đâu là hành vi của NHibernate 4 tầng hai bộ nhớ cache được mô tả (hoặc ít nhất là thay đổi đối với phiên bản 3 được ghi lại)
- Có thể sử dụng bộ nhớ cache cấp thứ hai cho các phần tử con tải chậm không? (Hoặc ít nhất là đảm bảo rằng chỉ có id được nạp và sau đó có bộ nhớ cache mức thứ hai hiện thực các thực thể)
Cảm ơn trước