【问题标题】:Nhibernate custom loader for collection用于收集的 Nhibernate 自定义加载器
【发布时间】:2011-03-18 06:50:10
【问题描述】:

我真的希望有人可以帮助解决这个问题,已经尝试了一天半的各种组合......

基本上我有一些分层数据存储在一个表中,通常的 parentID 映射到行 id 场景。我在域对象中建模了一个属性,该属性返回给定项目的祖先列表。这一切似乎都在查看日志(即它检索和水合正确的行:

CollectionLoadContext - 4 collections were found in result set for role: Domain.Keyword.Ancestors
CollectionLoadContext - 4 collections initialized for role: Domain.Keyword.Ancestors

但是:集合实际上从未被填充,单步执行我的代码 Ilist 不包含它应该包含的内容 - 只有一个实例(与当前记录相同)!??日志中有关于无法映射返回的列的 no 错误,它似乎没有正确填充?我确定我错过了一些明显的东西 - 但只是看不到它......

我的映射中有这样的集合声明

<bag name="Ancestors" inverse="true"cascade="none" lazy="true" fetch="select" generic="true" >
  <key column="KeywordID"/>
  <one-to-many class="Domain.Keyword, BS.Core" />
  <loader query-ref="CustomAncestorLoader"  />
</bag>

... 和一个名为 query 的自定义加载器,用于返回给定关键字的关键字祖先列表:

<sql-query name="CustomAncestorLoader">
<load-collection alias="Ancestors" role="Domain.Keyword.Ancestors"/>

SELECT  s.KeywordID, s.kwdhier, s.Keyword, s.Notes, s.position , s.ParentKeywordId
From dbo.utKeywordBranch(:ParentID) k join Keywords s on k.KeywordId = s.[KeywordID] </sql-query>

我已经把头发扯掉了,因为我已经花了这么长时间了,所以任何帮助都将不胜感激!

【问题讨论】:

    标签: c# nhibernate collections loader bag


    【解决方案1】:

    好吧,当它如此显而易见时,你难道不讨厌它.....

    基本上,该集合被映射到一个名为 KeywordId 的键——这意味着它将根据该键上的当前对象 ID 加入,在返回的行中,没有任何对象具有该键(因为它们都是不同的对象)。

    为了解决这个问题,我在名为 OriginalID 的命名查询中添加了一个新的返回列,它只是返回了我们作为参数传入的 ID。这样,集合就可以映射到:

    <bag name="Ancestors" inverse="true" cascade="none" lazy="true"  fetch="select" generic="true" >
      <key column="OriginalID"/>
      <one-to-many class="Domain.SubjectKeyword, BS.Core" />
      <loader query-ref="CustomAncestorLoader"    />
    </bag>
    

    SELECT k.OriginalId, s.KeywordID, s.kwdhier, s.Keyword, s.Notes, s.position , s.ParentKeywordId
    From dbo.uKeywordBranch(:Id) k join KATKeywords s on k.KeywordId = s.[KeywordID]
    

    不过,有时候说话只是有帮助!

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 2023-03-24
      • 2014-03-10
      • 1970-01-01
      • 2019-11-08
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多