在查询实体时如何强制NHibernate命中数据库?

时间:2010-03-26 21:15:37

标签: nhibernate

我有一种情况,我需要NHibernate忽略它的缓存,只是因为数据已经改变(另一台计算机上的另一个用户已经改变了数据)而命中数据库。这怎么可能?到目前为止,我没有运气。获取,加载,Linq查询,没关系。 NHibernate没有获得最新的数据。

1 个答案:

答案 0 :(得分:7)

对于二级缓存,您必须使用ISessionFactory.Evict(typeof(T));清除它。对于第一级缓存,您只需拨打ISession.Clear();

即可

如果你不知道何时清除二级缓存,你应该从另一个应用程序发送一些信息到这个(通过套接字或webservice ...)。如果无法做到这一点,您可以在数据库中创建一个表,告诉您上次修改数据库中的数据的时间,然后检查该表中的记录。如果它被修改,那么你清除缓存。只要确保每次其他应用程序更改数据库时记录都会更新(您可以使用触发器或检查系统表来执行此操作)。

如果使用触发器,如果​​使用nhibernate更新,请不要忘记忽略该记录。 您可以使用设置了最后更新时间的变量并将其与之比较。