如何使用自动映射程序 6.1.1+ 映射 EF 动态代理



保存后,我正在尝试将实体框架模型映射到视图模型。

//Map my incoming VM to a DTO and save it
Inquiry savedInquiry = InquiryLogic.Save(mapper.Map<InquirySpec>(inquiryVM));
//Map the returned Inquiry back to a VM and return it
return mapper.Map<JournalEntryInquiryVM>(savedInquiry);

我可以成功地将查询映射到JournalEntryInquiryVM,但是当我尝试将savedInquiry映射回JournalEntryInquiryVM时,我得到以下异常,因为它实际上不仅仅是一个Inquiry,它是由实体框架创建的动态代理:

缺少类型映射配置或不受支持的映射。

映射类型: Inquiry_66DF1FFF68CAC6E17FC0F72D753A523B9CCF3AFA55E82C2B5B910A95B0BFCC79 -> 日志条目查询VM System.Data.Entity.DynamicProxies.Inquiry_66DF1FFF68CAC6E17FC0F72D753A523B9CCF3AFA55E82C2B5B910A95B0BFCC79 -> TLGI。客户关系管理。MVCWeb.ViewModels.CustomerAccounts.JournalEntryInquiryVM

此时,在代码中,我的 DbContext 已释放,并且我已经检索了所需的任何导航属性。我只需要它来进行映射,就好像它只是一个查询一样。

看起来这在旧版本的 AutoMapper 中是可能的,但我在 StackOverflow 或 Automapper wiki 上找不到任何关于版本 6.1.1(这是我正在使用的版本)或更高版本的答案。AutoMapper变化如此之大,以至于很难找到任何相关的东西。

使用AutoMapper的IQueryable Extensionion

  1. 如果要从可查询的代理获取 DTO:

    mapper.ProjectTo<TDest>(sourceQueryable)会帮助你。

  2. 如果要从代理实体获取 DTO 对象:

    mapper.ProjectTo<TDest>(new[] { source }.AsQueryable()).Single()

在您的情况下,JournalEntryInquiryVMTDestsavedInquirysource

最新更新