2

誰かがこれを手伝ってくれることを本当に望んでいます.1日半の間、さまざまな組み合わせを試してきました....

基本的に、単一のテーブルにいくつかの階層データが格納されています。通常の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 に答える