我有一种情况,我需要NHibernate忽略它的缓存,只是因为数据已经改变(另一台计算机上的另一个用户已经改变了数据)而命中数据库。这怎么可能?到目前为止,我没有运气。获取,加载,Linq查询,没关系。 NHibernate没有获得最新的数据。
答案 0 :(得分:7)
对于二级缓存,您必须使用ISessionFactory.Evict(typeof(T));
清除它。对于第一级缓存,您只需拨打ISession.Clear();
。
如果你不知道何时清除二级缓存,你应该从另一个应用程序发送一些信息到这个(通过套接字或webservice ...)。如果无法做到这一点,您可以在数据库中创建一个表,告诉您上次修改数据库中的数据的时间,然后检查该表中的记录。如果它被修改,那么你清除缓存。只要确保每次其他应用程序更改数据库时记录都会更新(您可以使用触发器或检查系统表来执行此操作)。
如果使用触发器,如果使用nhibernate更新,请不要忘记忽略该记录。 您可以使用设置了最后更新时间的变量并将其与之比较。