nHibernate标准ResultTransformer不工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nHibernate标准ResultTransformer不工作相关的知识,希望对你有一定的参考价值。
我有(长而复杂的)查询,基于Criteria。
以下代码:
//....
var myList = criteria.List<MyEntity>()
工作正常,但它返回50个整个实体的列表。出于性能原因,我想为我的查询应用投影。以下代码也可以正常工作:
criteria.SetProjection(
Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("Numer")));
var objList = criteria.List<Object[]>()
它返回50个数组的集合,每个数组包含2个对象,我可以通过索引访问它们。我想通过它的名称访问各个属性,所以我编写了以下代码:
criteria.SetProjection(
Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("Numer")));
var myList = criteria.SetResultTransformer(Transformers.AliasToEntityMap).List<Hashtable>();
var myElement = myList[0]["Id"];
就像我在互联网上看到的那样,它应该返回字典列表。
但是: - myList包含50个空项 - myElement为null。
我究竟做错了什么?
答案
这里的诀窍是:转换为key
/ value
字典...需要别名。
让我们像这样调整投影:
criteria.SetProjection(
Projections.ProjectionList() // Alias
.Add(Projections.Property("Id") .As("Id"))
.Add(Projections.Property("Numer").As("Number"));
其余的都会工作......
以上是关于nHibernate标准ResultTransformer不工作的主要内容,如果未能解决你的问题,请参考以下文章