Nhibernate 地图集合是可查询的

Nhibernate 地图集合是可查询的,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我已经习惯于使用SQLAlchemy(Python)将关系/集合映射为lazy=“dynamic”,它将属性映射为查询对象,而不是填充的列表/集合(或延迟加载属性的代理)。然后,此映射属性允许您在执行此操作之前进一步细化用于获取集合的查询(应用订单、限制、筛选器等) 例如,在SQLAlchemy中,我可以映射如下关系: class Post(Base): ... class User(Base): ... posts = relationship(Post, lazy=

我已经习惯于使用SQLAlchemy(Python)将关系/集合映射为
lazy=“dynamic”
,它将属性映射为查询对象,而不是填充的列表/集合(或延迟加载属性的代理)。然后,此映射属性允许您在执行此操作之前进一步细化用于获取集合的查询(应用订单、限制、筛选器等)

例如,在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()


我很想找到一种使用Fluent NHibernate实现这一点的方法,将集合映射为QueryOver或IQueryable(LINQ),例如:

publicvirtualqueryoverposts{get;set;}
或
公共虚拟IQueryable Posts{get;set;}
在映射中执行以下操作:

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        ...
        HasMany(u => u.Posts).Fetch.Dynamic
    }
}
公共类用户映射:类映射
{
公共用户映射()
{
...
HasMany(u=>u.Posts).Fetch.Dynamic
}
}

目前使用Fluent NHibernate(或仅使用NHibernate)可以实现这一点吗?

使用NHibernate是可行的,但它还不是完全现成的。


您需要编写自己的collectionwrapper实现IQueryable,将其与自己的CollectionFactory一起注入,并将查询生成委托给加载包含对象的会话。

谢谢,我会看看是否可以使用它。
public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        ...
        HasMany(u => u.Posts).Fetch.Dynamic
    }
}