是否可以在使用NHibernate的Linq提供程序加载的实体上设置只读模式?
例如,可以使用Session.QueryOver完成以下操作(我也相信Criteria):
Session.QueryOver(Of Foo)().ReadOnly()
Session.Query是否有可用的等效项?
答案 0 :(得分:8)
如文档10.1.2. Loading persistent entities as read-only中所述:
更改默认行为,以便NHibernate加载实体实例 可变类进入会话并自动生成它们 只读,致电:
Session.DefaultReadOnly = true;
要更改默认值,以便NHibernate加载的实体不会 只读,电话:
Session.DefaultReadOnly = false;
因此,在致电Session.Query...
致电Session.DefaultReadonly = true
之前,由于此设置会转到ISession
,而不是发送给提供商。
答案 1 :(得分:2)
如果您需要只读会话,可以使用更好的方法:how to create a readonly session in nHiberate?
Session.DefaultReadOnly = true;
- 在这种情况下,NHibernate将累积实体的所有更新(调用所有侦听器e.t.c。)
session.FlushMode = FlushMode.Never
在这种情况下,NHibernate不会调用任何侦听器,因为我知道