nHibernate标准ResultTransformer不工作

问题描述 投票:1回答:1

我有(长而复杂的)查询,基于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。

我究竟做错了什么?

c# nhibernate criteria hibernate-criteria resulttransformer
1个回答
1
投票

这里的诀窍是:转换为key / value字典...需要别名。

让我们像这样调整投影:

criteria.SetProjection(
        Projections.ProjectionList()          // Alias
            .Add(Projections.Property("Id")   .As("Id"))
            .Add(Projections.Property("Numer").As("Number"));

其余的都会工作......

© www.soinside.com 2019 - 2024. All rights reserved.