代码之家  ›  专栏  ›  技术社区  ›  Buginator

nHibernate映射问题-无法初始化代理-无会话

  •  0
  • Buginator  · 技术社区  · 14 年前

    我刚刚开始学习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]-无法初始化代理-没有会话。

    1. 我的地图有问题吗?
    2. 如果没有,有什么关于如何处理错误的建议吗?

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  9
  •   Diego Mijelshon    14 年前

    问题不在于映射,而在于会话处理。

    您正在关闭会话,然后尝试访问延迟加载的属性(团队)。