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