AutoMapper IQueryable 扩展是否仍适用于 EF 6.1?

Do AutoMapper IQueryable extensions still work with EF 6.1?

尝试使用 AutoMapper 将实体解析为视图模型时,我不断收到异常,但我不明白为什么。

以下代码

Mapper.CreateMap<Article, ArticleViewModel>()
   .ForMember(a => a.CreatedDate, a => a.ResolveUsing<DateResolver>())
   .ForMember(a => a.Content, a => a.ResolveUsing<ContentResolver>().ConstructedBy(() =>
      new ContentResolver(articleParserFactory)));

var test = this.context.Articles
         .Project()
         .To<ArticleViewModel>()
         .ToArray();

总是导致消息 "Can't resolve this to Queryable Expression" 异常。我该如何补救?

编辑:这似乎不是 .Project().To() 的问题,如果我在上面的代码中删除 ValueResolvers,AutoMapper 就会执行它的操作。奇怪的是,如果我坚持只使用 DateResolver,AutoMapper 永远不会进入 ResolveCore 方法,而是抛出相同的异常。

AutoMapper 中的可查询扩展不支持 ValueResolvers:

https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions#supported-mapping-options

您可以改用 MapFrom 或自定义类型转换。执行哪些操作取决于您的解析器执行的操作,但请记住,您只能执行 LINQ 提供程序能够处理的操作。

很多时候我尽量不让 AutoMapper 只处理格式问题,如果您的解析器正在这样做的话。我宁愿在 View/Serializer 层处理,那里的扩展点要深得多。