1

次のエンティティがあります

User
Job

ユーザーには FavoriteJobs があります。これは Job との多対多の関連付けです。また、この関連付けはフィルタリングされ、アクティブな (アーカイブされていない) ジョブのみが取得されます。

FavoriteJobs 関連付けのマッピングは次のようになります。

HasManyToMany(x => x.FavoriteJobs)
.Table("UserJob")
.ParentKeyColumn("UserId")
.ChildKeyColumn("JobId")
.ApplyChildFilter<ExcludeArchivedJobsFilter>("IsArchived = :condition")
.Cascade.None();

ジョブは、アプリケーションからいつでもアーカイブおよびアーカイブ解除できます。

ユーザーを取得すると、FavoriteJobs コレクションには適切なジョブ (アクティブなジョブのみ) が取り込まれます。

問題は、ユーザーを保存したいときに、フィルター処理されたすべてのジョブが関連付けが壊れているかのように扱われ、クロスリファレンス テーブルから削除されることです (ユーザーがフィルター処理されたジョブをお気に入りではないとマークしたように) .

フィルタリングされたエントリをフィルタリングされただけで削除されていないとマークするパターンがあるかどうか疑問に思っています。

更新イベントがあるときにマッピングからフィルターを無効にするようなもの。

アイデアをいただければ幸いです。

4

1 に答える 1

0

セット コレクションは、保存時にコレクションを完全に書き換えます。そのため、フィルタリングされた要素は消えます。

NHibernate - Filtered ManyToMany relationship returns null recordsで指定された理由により、リストコレクションがそれらを失っている可能性があります

代わりに bag または idbag を試すことはできますか? または、更新シナリオ中にフィルターを無効にします。

于 2013-01-14T17:52:52.063 に答える