来自休眠投影标准的动态 DTO

Dynamic DTO from nhibernate projections criteria

我的 C# 代码中有一个投影列表:

var criteria = DetachedCriteria.For(this.modelType);

         for (int i = 0; i < this.fields.Length; i++)
            projections.Add(Projections.Property(this.fields[i]));

        if (fields.Length > 0)
            criteria.SetProjection(projections);

如果我不在投影中设置任何字段,我的 return 如下:

但是如果我在我的代码中设置投影,我的结果如下:

如何在动态 DTO 对象中转换带有投影的列表?

我们需要的是变压器:

criteria
    .SetResultTransformer(
      NHibernate.Transform.Transformers.AliasToBean<MyEntity>())

或没有通用

criteria
    .SetResultTransformer(
      NHibernate.Transform.Transformers.AliasToBean(this.modelType))

变形金刚的关键在于使用别名(参见 .As()):

.SetProjection(Projections.ProjectionList()
  .Add(Projections.Property("Property1").As("Property1"))
  .Add(Projections.Property("Property2").As("Property2"))
  .Add(Projections.Property("Property3").As("Property3"))
)

在此处查看更多信息,例如:

  • How to partially project a child object with many fields in nHibernate
  • NHibernate AliasToBean transformer associations