AutoMapper不会解析NHibernate实体

时间:2015-06-30 09:37:58

标签: c# nhibernate asp.net-web-api automapper

考虑这个实体:

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; }
}

很明显,CondRuleCondRuleType个实体之间存在一对一的关系。

我还有CondRuleDto

public class CondRuleDto
{
    public decimal Id { get; set; }
    public string Name { get; set; }
    public CondRuleType RuleType { get; set; }
}

我已使用CondRuleCondRuleDto映射到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代理。我希望AutoMapperRuleType代理映射到POCO。如何使这项工作?

PS:我必须提一下,当我使用查询并使用automapper的Project时,它会产生一个没有代理的列表(我知道Project会发生这种情况我可能需要在Project之后使用Session.Get之类的东西:

Session.Query<CondRule>().Project().To<CondRuleDto>().ToList()

1 个答案:

答案 0 :(得分:0)

Casts不会更改基础对象(即使您将其实例映射到CondRuleType类型的另一个属性,您的CondRuleType仍将是代理。

您似乎需要创建自定义映射,其中CondRule.RuleType已映射,从而创建CondRuleType的新实例。