1

我已经习惯于使用SQLAlchemy(Python)来映射与lazy="dynamic"的关系/集合,该关系将该属性映射为查询对象而不是填充的列表/集合(或用于延迟加载属性的代理)。然后,这个映射属性允许您在这样做之前进一步优化用于获取集合的查询(应用顺序,限制,过滤器等)。作为Queryable的地图集合

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


我很想找到一个方法来做到这一点使用FL uent 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 
    } 
} 

这是目前可能使用功能NHibernate(或只是NHibernate的)?

回答

0

这是可能的使用NHibernate,但它不是开箱即用。

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

+0

谢谢,我会看看我是否可以在某处找到它。 –