【发布时间】:2010-02-05 05:17:55
【问题描述】:
在我的 POCO 类中,我有 16 个属性映射到具有 16 列的数据库表。现在我必须编写仅使用 NHIbernate 从表中获取列子集的方法。当我不想获取数据库中持久对象的所有属性时如何执行此操作。
【问题讨论】:
标签: nhibernate
在我的 POCO 类中,我有 16 个属性映射到具有 16 列的数据库表。现在我必须编写仅使用 NHIbernate 从表中获取列子集的方法。当我不想获取数据库中持久对象的所有属性时如何执行此操作。
【问题讨论】:
标签: nhibernate
投影允许从查询中返回实体列表以外的内容。
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>();
【讨论】:
当前版本不支持类的延迟加载部分(我相信即将发布的版本确实包含此功能)。
目前您可以关注workaround proposed here。
【讨论】: