Nhibernate项目到类属性

问题描述:

如何使用NHibernate项目到类属性?例如:Nhibernate项目到类属性

[Test] 
public void Test() 
{ 
    MyClass dto = null; 

    var test = CurrentSession.CreateCriteria<Contact>() 
     .Add(Restrictions.Eq("ContactName", "John Smith")) 
     .SetProjection(Projections.ProjectionList() 
      .Add(Projections.Property("ContactName").WithAlias(() => dto.SubClass.Name)) 
      .Add(Projections.Property("EmailAddress").WithAlias(() => dto.Email)) 
     ) 
     .SetResultTransformer(Transformers.AliasToBean<MyClass>()) 
     .List<MyClass>(); 

    Assert.That(test[0].SubClass.Name, Is.EqualTo("John Smith")); 
} 

class MyClass 
{ 
    public string Email { get; set; } 

    public MySubClass SubClass { get; set; } 
} 

class MySubClass 
{ 
    public string Name { get; set; } 
} 

正如你看到我有一个简单的查询,并且希望改变1行插入1个对象 - 没有列出,但有一个子类。不幸的是,它失败:

NHibernate.PropertyNotFoundException:类找不到属性“名称”二传手“MyTest的+ MyClass的”

是否有可能实现无定制变压器这种行为?

默认结果转换器将能够填充根实体属性。但我们可以介绍我们的定制结果转换器。有一个我用:

这是准备.符号转换成内部对象链(不包括收藏品)

所以,如果你买了,并重用它,这个语法将工作:

... 
.SetProjection(Projections.ProjectionList() 
    .Add(Projections.Property("ContactName").As("SubClass.Name")) 
    .Add(Projections.Property("EmailAddress").As("Email")) 
) 
.SetResultTransformer(DeepTransformer<MyClass>()) 

你甚至可以改善它,但定制变压器的想法现在应该清楚