私は SQLAlchemy (Python) に慣れて、データが取り込まlazy="dynamic"
れたリスト/コレクション (または遅延ロードされたプロパティのプロキシ) ではなく、プロパティを Query オブジェクトとしてマップするリレーションシップ/コレクションをマップします。このマップされたプロパティを使用すると、コレクションをフェッチする前に、コレクションをフェッチするために使用されるクエリをさらに絞り込むことができます (順序、制限、フィルターなどを適用します)。
たとえば、SQLAlchemy では、次のように関係をマッピングできます。
class Post(Base):
...
class User(Base):
...
posts = relationship(Post, lazy="dynamic")
そして、ユーザーを取得するときに、投稿に順序を適用したり、最後の 5 つだけを取得したりできます。
user = session.query(User).get(1)
# Fetch the last 5 posts by user 1
posts = user.posts.order_by(Post.create_date.desc()).limit(5).all()
http://docs.sqlalchemy.org/en/rel_0_7/orm/collections.html
Fluent NHibernate を使用して、コレクションを次のような QueryOver または IQueryable (LINQ) としてマッピングする方法を見つけたいと思います。
public virtual QueryOver<Post> Posts {get; set;}
or
public virtual IQueryable<Post> Posts { get; set; }
マッピングでは、次のようにします。
public class UserMap : ClassMap<User>
{
public UserMap()
{
...
HasMany(u => u.Posts).Fetch.Dynamic
}
}
これは現在、Fluent NHibernate (または単に NHibernate) を使用して可能ですか?