考虑这个实体:
public class CondRule
{
public virtual decimal Id { get; set; }
public virtual string Name { get; set; }
public virtual CondRuleType RuleType { get; set; }
public virtual string Statement { get; set; }
}
和CondRuleType
是:
public class CondRuleType
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
很明显,CondRule
和CondRuleType
个实体之间存在一对一的关系。
我还有CondRuleDto
:
public class CondRuleDto
{
public decimal Id { get; set; }
public string Name { get; set; }
public CondRuleType RuleType { get; set; }
}
我已使用CondRule
将CondRuleDto
映射到AutoMapper
:
Mapper.CreateMap<CondRule, CondRuleDto>();
当我致电Session.Get
以获取CondRule
ID并将结果映射到CondRuleDto
时,AutoMapper无法解析代理(此处为RuleType
)。
这是我的代码:
var condRule = Session.Get<CondRule>(id);
var condRuleDto = Mapper.Map<CondRuleDto>(condRule);
当我观看condRuleDto时,RuleType
属性是NHibernate代理。我希望AutoMapper
将RuleType
代理映射到POCO。如何使这项工作?
PS:我必须提一下,当我使用查询并使用automapper的Project
时,它会产生一个没有代理的列表(我知道Project
会发生这种情况我可能需要在Project
之后使用Session.Get
之类的东西:
Session.Query<CondRule>().Project().To<CondRuleDto>().ToList()
答案 0 :(得分:0)
Casts不会更改基础对象(即使您将其实例映射到CondRuleType
类型的另一个属性,您的CondRuleType
仍将是代理。
您似乎需要创建自定义映射,其中CondRule.RuleType
已映射,从而创建CondRuleType
的新实例。