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 的集合包装器,将其注入您自己的 CollectionFactory 并将查询生成委托给加载包含对象的会话。

于 2013-01-08T12:39:00.147 回答