gpt4 book ai didi

c# - NHibernate QueryOver 用投影填充父对象中的属性对象

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:27 26 4
gpt4 key购买 nike

我的 QueryOver 有问题,我不明白为什么。我的查询返回 View 模型对象 ContactInfo。我在 Employee 属性上收到此错误:“找不到属性的 setter ”。如何在 ContactInfo 中填写 Employee 属性?我做错了什么?

ViewModel 对象:

public class ContactInfo    
{
public EmployeeInfo Employee { get; set; }
public string Email { get; set; }
public string InternalTelephone { get; set; }
}

查询

public override ContactInfo Execute()
{
ContactInfo r = null;
EmployeeInfo ei = null;

var result = Session.QueryOver<Job>()
.JoinAlias(j => j.EmployeeInfo, () => ei)
.Where(j => j.EmployeeInfo.Id == _employeeId)
.Select(
Projections.Property<Job>(j => ei.Id).WithAlias(() => r.Employee.Id),
Projections.Property<Job>(j => ei.FirstName).WithAlias(() => r.Employee.FirstName),
Projections.Property<Job>(j => ei.LastName).WithAlias(() => r.Employee.LastName),
Projections.Property<Job>(j => ei.ReferenceCode).WithAlias(() => r.Employee.ReferenceCode),
Projections.Property<Job>(j => j.Telefoon).WithAlias(() => r.InternalTelephone)
)
.TransformUsing(Transformers.AliasToBean<ContactInfo>())
.Take(1)
.SingleOrDefault<ContactInfo>();

var email = Session.QueryOver<Employee>()
.Where(e => e.Id == _employeeId)
.Select(e => e.Email)
.SingleOrDefault<string>();

result.Email = email;

return result;
}
}

最佳答案

我们可以做的是使用不同于默认的结果转换器,例如DeepTransformer .

在那种情况下,查询必须使用类似于 DTO 模型的 Alias。因此,如果我们有属于 JoinAlias 的域属性 ei.FirstName - j.EmployeeInfo - 别名必须反射(reflect) DTO ContactInfo - “EmployeeInfo.FirstName”

.Select(        
Projections.Property<Job>(j => ei.FirstName) // the mapped domain model
.As("EmployeeInfo.FirstName"), // the path in DTO/view model
...
)
.TransformUsing(DeepTransformern<ContactInfo>()) // the DTO

现在,路径 "EmployeeInfo.FirstName" 将用于填充 Employee 作为属性 EmployeeInfo 及其属性 FirstName

还有这个结果转换器

DeepTransformer 将使用 Alias 来构建引用树。可用于引用/多对一以及IDictionary ...(但不适用于集合)

注意:.Is() 方法来自一些扩展,可以用 != null 代替

public static partial class Ext
{
public static bool Is(this object value)
{
return value != null;
}
....

关于c# - NHibernate QueryOver 用投影填充父对象中的属性对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27900297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com