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>())
你甚至可以改善它,但定制变压器的想法现在应该清楚