用NHIbernate查询选定的列?

时间:2010-02-05 05:17:56

标签: nhibernate

在我的POCO类中,我有16个属性,它们映射到具有16列的数据库表。现在我必须编写只使用NHIbernate从表中获取列子集的方法。当我不想获取数据库中持久化对象的所有属性时,如何执行此操作。

2 个答案:

答案 0 :(得分:1)

投影可以从查询中返回除实体列表之外的其他内容。

var proj = Projections.ProjectionList()
    .Add(Projections.Property("Id"), "Id")
    .Add(Projections.Property("Username"), "Username");

var list2 = DetachedCriteria.For<User>()
    .Add(Expression.Eq("Username", "lachlan"))
    .GetExecutableCriteria( sessionFactory.GetCurrentSession())
    .SetProjection( proj )
    .List();

NHibernate还可以将投影结果映射到类型列表。

var proj = Projections.ProjectionList()
    .Add(Projections.Property("Id"), "First")
    .Add(Projections.Property("Username"), "Second");

var list2 = DetachedCriteria.For<User>()
    .Add(Expression.Eq("Username", "lachlan"))
    .GetExecutableCriteria( sessionFactory.GetCurrentSession())
    .SetProjection( proj )
    .SetResultTransformer(Transformers.AliasToBean(typeof(Pair)))
    .List<Pair>();

答案 1 :(得分:0)

当前版本不支持延迟加载类的部分(我相信即将发布的版本确实包含此功能)。

目前,您可以关注workaround proposed here