突然杀出一个项目,令到我暂时停止学习NHibernate。只是我前两日做的笔记,没有记录全,迟点再继续补全。
Lazy:
在session在open状态时,从表面上看设置了lazy=true和设置lazy=false或者没有设置是一样的。
一旦session.close(),设置未lazy=true的集合 会报错 :failed to lazily initialize a collection of role: NHibernateEntites.Entities.UserType.Users, no session or session was closed"
由此猜想,设置了lazy=true的时候,当用户请求UserType的时候并不加载Users,而当用户使用到users的时候才自动载入。
所以一旦session.close(),载入的时候就会抛exception。
所以在脱离 session 使用实体的关联集合就需要注意。
property 配置:
一直都使用 <property name ="PowerName" column ="power_name"/> 这样的语句配置,但是发局这样配置,
NHibernate会使用nvarchar(255)作为数据库字段的类型。而当我使用varchar的时候,就会发生错误。
经过google得知在property节下可以配置一个column节,column中有一个sql-type的属性可以解决这个问题。
于是我使用以下配置:<property name ="PowerName" type="String">
<column name ="power_name" sql-type="varchar(50)" />
</property>