2

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

//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);

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

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

Mapping types: Inquiry_66DF1FFF68CAC6E17FC0F72D753A523B9CCF3AFA55E82C2B5B910A95B0BFCC79 -> JournalEntryInquiryVM System.Data.Entity.DynamicProxies.Inquiry_66DF1FFF68CAC6E17FC0F72D753A523B9CCF3AFA55E82C2B5B910A95B0BFCC79 -> TLGI.CRM.MVCWeb.ViewModels.CustomerAccounts.JournalEntryInquiryVM

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

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

4

1 回答 1

0

使用AutoMapper 的 IQueryable 扩展

  1. 如果您想从可查询的代理中获取 DTO:

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

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

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

在您的情况下,JournalEntryInquiryVMis TDestsavedInquiryis source

于 2021-11-10T13:11:46.827 回答