1

私は 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) を使用して可能ですか?

4

1 に答える 1

0

NHibernate を使用することは可能ですが、すぐに使えるわけではありません。

IQueryable を実装する独自の collectionwrapper を作成し、それを独自の CollectionFactory に注入し、含まれているオブジェクトをロードしたセッションにクエリ生成を委譲する必要があります。

于 2013-01-08T12:39:00.147 に答える