标签: syscache2

如何在NHibernate中清除整个二级缓存

我希望通过代码清除NHibernate中的整个二级缓存.有没有办法做这个独立于正在使用的缓存提供程序?(我们让客户在同一个应用程序中同时使用memcache和syscache).

我们希望清除整个缓存,因为数据库外部可能已发生更改(我们无法保证:哪些表/实体受到影响,因此我们必须假设最坏).

nhibernate memcached second-level-cache syscache2

25
推荐指数
1
解决办法
8000
查看次数

如何制作NHibernate缓存获取的子集合?

我有一个相当简单的条件查询来获取子集合,如下所示:

var order = Session.CreateCriteria<Order>()
    .Add(Restrictions.Eq("Id", id))
    .SetFetchMode("Customer", FetchMode.Eager)
    .SetFetchMode("Products", FetchMode.Eager)
    .SetFetchMode("Products.Category", FetchMode.Eager)
    .SetCacheable(true)
    .UniqueResult<Order>();
Run Code Online (Sandbox Code Playgroud)

使用NH Prof,我已经验证这只使用冷缓存只进行一次数据库往返(如预期); 但是,在连续执行时,它仅从Order缓存中检索,然后使用SELECT(N + 1)为图中的每个子实体命中数据库,如下所示:

Cached query: SELECT ... FROM Order this_ left outer join Customer customer2 [...]
SELECT ... FROM Customer WHERE Id = 123;
SELECT ... FROM Products WHERE Id = 500;
SELECT ... FROM Products WHERE Id = 501;
...
SELECT ... FROM Categories WHERE Id = 3;
Run Code Online (Sandbox Code Playgroud)

等等等等.显然,它不缓存整个查询或图形,只缓存根实体.第一个"缓存查询"行实际上具有join它应该具有的所有条件 - 它肯定正确地缓存了查询本身,显然不是实体.

我已经尝试过使用SysCache,SysCache2甚至是HashTable缓存提供程序,而且我似乎总是得到同样的行为(NH版本3.2.0). …

.net nhibernate syscache2

14
推荐指数
1
解决办法
5051
查看次数