2010-07-20 5 views
2

Im действительно надеюсь, что кто-то может помочь с этим, пытаются различные комбинации для дня и половины сейчас ....Nhibernate заказ погрузчик для сбора

В принципе у меня есть некоторые иерархические данные, хранящиеся в одной таблице, обычный parentID сопоставляется сценарию с идентификатором строки. Я смоделировал свойство внутри объекта домена, который возвращает список предков для данного элемента. Все это похоже на работу, глядя на журналы (т.е. его извлечения и увлажняющим правильные строки:

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

ОДНАКО: коллекция никогда не получает, ступая, хотя мой код IList не содержит того, что он должен - только один экземпляр (то же, что и текущая запись)! Есть no Ошибки в журналах о невозможности сопоставления возвращенных столбцов, он просто не заполняется правильно? Im im im missing что-то очевидное - но просто не могу это увидеть ....

У меня есть сводная декларация, как это в моем картине

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

... и пользовательский загрузчик именованный запрос, чтобы вернуть список ключевых слов предков для данного ключевого слова:

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

Im в точке, где им разрывая волосы, как я провел так много времени на это уже, поэтому любая помощь будет очень признательна!

ответ

3

Хорошо, не просто ненавижу, когда его SO очевидно .....

в основном коллекция сопоставлен с ключом под названием KeywordId - означает, что он присоединится на основе текущего объекта ид на этот ключ, в возвращаемых строках ни один из объектов не имел бы этого ключа (так как все они разные объекты).

Итак, чтобы исправить, я добавил новый столбец возврата в именованный запрос с именем OriginalID, который просто вернул идентификатор, который мы передаем в качестве параметра. Таким образом, коллекция имеет что-то для сопоставления:

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

Иногда это просто помогает говорить это, хотя!