【问题标题】:Map collection as Queryable地图集合为可查询
【发布时间】:2013-01-23 10:15:16
【问题描述】:

我已经习惯在 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)?

【问题讨论】:

    标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    可以使用 NHibernate,但它还不是开箱即用的。

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

    【讨论】:

    • 谢谢,我看看能不能用上它。
    猜你喜欢
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    相关资源
    最近更新 更多