【发布时间】:2020-11-19 10:59:30
【问题描述】:
我正在使用 AutoMapper 7.0.1 版本。我有一个 DTO 类:
public class Dto1{
public IModel Model {get;set;}
}
public interface IModel {}
public class QuestionA: IModel {
public string Text {get; set;}
}
public class QuestionB: IModel {
public string Id {get;set;}
}
在创建 Linq to Entity 期间,我遇到了一个条件,我必须根据条件创建 QuestionA 类或 ClassB 的对象。我的映射是这样的:
CreatMap<SourceClass, Dto1>()
.ForMember(d=> d.Model, opt=> opt.MapFrom(src => src.Type == 0 ?
new QuestionA()
{
Text = src.Text
} : new QuestionB()
{
Id = src.Id
}));
我无法实现这种行为。我得到运行时异常:
无法将类型“QuestionA”转换为类型“IQuestionTypeModel”。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
【问题讨论】:
-
您是否尝试在
MapFrom表达式中强制转换为IModel?喜欢(IModel) new QuestionA() -
是的!但它没有用
-
请用代码更新问题,显示您如何使用 AutoMapper 以及您正在执行的查询。我尝试使用 AutoMapper Queryable Extensions
ProjectTo()使用 EF Core 和本地 SQL 服务器,但我未能重现您遇到的错误。它奏效了。
标签: c# entity-framework mapping linq-to-entities automapper