是否可以在nHibernate中创建只读连接?
只读:nHibernate不会隐式或明确地清除对底层数据库的任何更改。
当关闭nhibernate连接时,它会自动清除对持久对象的更改。
将刷新模式设置为 never 是一种方法 - 但是可以反转(即某些代码可以重置刷新模式)。
答案 0 :(得分:14)
我认为您已经找到了解决方案,将刷新模式设置为never。是的,它是可更改的,但即使它不是,代码也可以简单地创建另一个具有不同刷新模式的会话。
我认为合适的解决方案是建议只读session.FlushMode = FlushMode.Never
并强制执行,方法是使用只有SELECT权限的数据库连接(或任何适合您情况的东西)。维护单独的ISessionFactory工厂可能有助于允许ReadOnlySessionFactory.Create()
。
答案 1 :(得分:6)
查看NHibernate 3.1 GA中可用的只读实体 https://nhibernate.jira.com/browse/NH-908
答案 2 :(得分:1)
NHibernate中有一个更新的只读功能(我不知道哪个版本,但它确实在3.3.0中)。您可以将会话设置为只读:
session.DefaultReadOnly = true
它会禁用旧值的缓存,从而提高性能和内存消耗。
chapter about read-only entities中有一个NHibernate reference documentation。
答案 3 :(得分:0)
累积更新,永远不会刷新对我来说似乎是一个糟糕的解决方案。 我发布了类似的问题。提供的解决方案使用不同的方法。所有事件都设置为空,因此被忽略。我的感觉是这是一种更好的方法。
我很惊讶这不容易做到。我喜欢使用扩展方法的实体框架方法.AsNoTracking()确保只读查询保持这种方式。