2

子コレクションに句を付けてNHibernateエンティティをロードする方法はありますか?「操作」に変更を記録するシナリオがあります。つまり、1つの操作に複数のエンティティへの変更を含めることができます。特定のエンティティのログをロードする場合は、そのエンティティに加えられた変更を含むすべての操作をロードします。これらの操作をロードすると、すべての変更がロードされます-関連する変更のみをロードしたいのです。

クラス:

public class Operation{
   public virtual DateTime TimeStamp { get; set; }
   public virtual IList<Change> Changes { get; private set; }
}

public class Change{
    public virtual string ChangeText { get; set; }
    public virtual int EntityId { get; set; }
} 

特定のエンティティの操作を取得する

 Session.QueryOver<Operation>().Where(o => o.Changes.Any(c => c.EntityId == entityId));
4

1 に答える 1

0

I.このOskarBerggrenの回答に記載されているように:https ://stackoverflow.com/a/13864061/1679310フィルター18.1 を適用できます。NHibernateフィルター

概要:

マッピングを調整する

<set ...>
    <filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</set>

そしてそれをこのように呼びます:

ISession session = ...;
session.EnableFilter("myFilter").SetParameter("myFilterParam", "some-value");
IList results = Session.QueryOver<Operation>()
  .Where(...
  .List();

II。他のオプションは、 :16.4Changesをクワイアするときにフィルタリングすることです。アソシエーションOperation

IQueryOver<Operation,Change> query =
 session.QueryOver<Operation>()
   .JoinQueryOver<Change>(o => o.Changes) // added explicit <Change>
     .Where(c => c.EntityId == entityId);
于 2013-01-17T11:39:24.400 に答える