我刚刚开始学习NHibernate,并且正在学习教程。在我自己的学习项目中,我为自己制定了一个问题。我有两张桌子:
Team:
TeamId*
Name
Match:
MatchId*
TeamAId
TeamBId
模型实体是:
队
public virtual int? TeamId { get; private set; }
public virtual string Name { get; set; }
public virtual IList<Match> HomeMatches { get; set; }
public virtual IList<Match> AwayMatches { get; set; }
匹配
public virtual int? MatchId { get; private set; }
public virtual Team TeamA { get; set; }
public virtual Team TeamB { get; set; }
这是我对团队的映射:
<property name="Name" type="string">
<column name="Name" sql-type="nvarchar" not-null="true"/>
</property>
<bag name="HomeMatches" inverse="true" cascade="all-delete-orphan">
<key column="TeamAId" />
<one-to-many class="Match"/>
</bag>
<bag name="AwayMatches" inverse="true" cascade="all-delete-orphan">
<key column="TeamBId" />
<one-to-many class="Match"/>
</bag>
这是匹配:
<many-to-one name="TeamA" class="Team">
<column name="TeamAId" sql-type="int" not-null="true" />
</many-to-one>
<many-to-one name="TeamB" class="Team">
<column name="TeamBId" sql-type="int" not-null="true" />
</many-to-one>
我想这不是正确的方法,因为我收到一条错误消息: NHibernate.LazyInitializationException:初始化[MyProject.Domain.Entities.Team#1] - 不能初始化代理 - 没有会话。
感谢。
答案 0 :(得分:9)
问题不在于您的映射,而在于您的会话处理。
您正在关闭会话,然后尝试访问延迟加载的属性(团队)。