2

我有实体:

[Table("Representatives")]
public class Representative
{
    [Column("RepID"), Key]
    public int Id { get; set; }
    [Column("MemID")]
    public int MemberId { get; set; }
    public virtual Member Member { get; set; }
}

[Table("Members")]
public class Member
{
    [Column("MemID"), Key]
    public int Id { get; set; }

    [ForeignKey("MemberId")]
    public virtual ICollection<Representative> Representatives { get; set; }
}

与多对一Representatives相关。Member我想检索一些代表及其父成员并将其全部投影到某个视图模型。我已经像这样配置了自动映射器:

    Mapper.CreateMap<Representative, RepresentativeViewModel>()
          .ForMember(m => m.RepId, a => a.MapFrom(x => x.Id))
          .ForMember(m => m.MemberModel, a => a.MapFrom(x => x.Member));

    Mapper.CreateMap<Member, MemberViewModel>()
          .ForMember(m => m.MemId, a => a.MapFrom(x => x.Id))
          .ForMember(m => m.OrganizationName, a => a.MapFrom(x => x.Name));

如果我运行此代码:

var prj = ctx.Representatives.Where(r => r.Id == 1).Project().To<RepresentativeViewModel>();

然后我得到包含 func 调用(已调试)的表达式树:

...
.Lambda #Lambda2<System.Func`2[ConsoleApplication1.Representative,ConsoleApplication1.RepresentativeViewModel]>(ConsoleApplication1.Representative $var1)
{
    .New ConsoleApplication1.RepresentativeViewModel(){
        Name = $var1.Name,
        RepId = $var1.Id,
        MemberModel = .Invoke (.Lambda #Lambda3<System.Func`2[ConsoleApplication1.Member,ConsoleApplication1.MemberViewModel]>)($var1.Member)
    }
}
.Lambda #Lambda3<System.Func`2[ConsoleApplication1.Member,ConsoleApplication1.MemberViewModel]>(ConsoleApplication1.Member $var2)
{
    .New ConsoleApplication1.MemberViewModel(){
        MemId = $var2.Id,
        OrganizationName = $var2.Name
    }
}
...

所以由于某种原因,builder 调用 Func 而不是调用 Expression。你知道为什么会这样吗?如何让我的映射器构建正确的表达式和 SQL 查询?

4

0 回答 0