我有这样的界面:
public interface ICoreType {
int TypeID {get;}
}
一个实现它的NHibernate类:
public class DueDateType : ICoreType {
public virtual int DueDateTypeID {get;set;}
...
public virtual int TypeID { get{ return this.DueDateTypeID; } }
}
这是我的映射:
<class name="DueDateType" table="tdfDueDateType" lazy="true" >
<cache usage="read-write" include="all"/>
<id name="DueDateTypeID" column="DueDateTypeID" >
<generator class="identity"/>
</id>
...
</class>
当我从NHibernate获取对象的实例,然后将其返回到创建它的活动会话的范围之外时,我可以获得值DueDateTypeID,但访问TypeID会抛出LazyInitializationException。 TypeID没有映射,因为我只想让它返回DueDateTypeID的值。
在我的映射中标记类lazy =“false”会消除问题。从我一直在阅读的内容来看,这是因为没有为非延迟映射类生成代理。
我想在这种情况下使用NHibernate的延迟加载功能;我是否需要实现IInterceptor或其他类似的东西,以便让NHibernate以不同的方式处理这个属性?
答案 0 :(得分:3)
问题是实体的所有成员在访问时都会触发延迟初始化(除了id)。 NH无法知道您在会员中的实际行动。在会话外触发延迟初始化时,会出现错误。
建议:
TypeID
,虽然没有必要,但实体已初始化,这对性能不利。