2

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

基本上我有一些分层数据存储在一个表中,通常的 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 不包含它应该包含的内容 - 只有一个实例(与当前记录相同)!??日志中没有关于无法映射返回的列的错误,只是似乎没有正确填充?我确定我错过了一些明显的东西 - 但只是看不到它......

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

<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>

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

4

1 回答 1

3

好吧,当它如此明显时,你不要只是讨厌它......

基本上,该集合被映射到一个名为 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]

有时它只是有助于谈论它!

于 2010-07-20T07:39:20.910 回答