2010-11-13 60 views

回答

1

我不相信你可以使用Criteria对内存中的集合进行查询,并开始考虑它,这似乎没有多大意义。如果我已经正确理解了所有内容,那么您已经对数据库查询过了。我建议调整您的原始查询(无论您选择哪种方法)以包含所有过滤器。或者你可以使用LINQ(如你所建议的)来优化你的结果。

另外,你想从内存中查询的理由是什么?

+0

谢谢,迈克。这里是场景:我使用Criteria对数据库运行查询,并缓存查询结果(实体ID)。 – Jacko 2010-11-13 04:09:34

+0

现在,我更新了原始查询结果中的一个实体。而不是逐出缓存的查询,我想重新在内存中运行查询,并更新缓存的查询。 – Jacko 2010-11-13 04:10:56

1

这听起来像你正在滚动你自己的缓存机制。我强烈建议检查NHibernate的二级缓存。它可以很好地处理许多复杂的场景,例如使对基础表的更新的查询结果无效。

http://ayende.com/Blog/archive/2009/04/24/nhibernate-2nd-level-cache.aspx

+0

谢谢,詹姆斯。我知道二级缓存。我想制作一个更智能的版本,它可以做更多的工作来避免查询失效。 – Jacko 2010-11-14 02:51:52

+0

你有没有考虑/调查与二级缓存集成?创建自己的包装现有ICacheProvider的ICacheProvider是否可以提供足够的控制权?只是一个想法,而不是实质上重新实现二级缓存的整个功能集...... – 2010-11-15 02:15:58