当实际目标类型是由实体框架生成的动态代理时,映射到目标

时间:2012-12-12 14:42:49

标签: ef-code-first automapper

我无法让这个工作:

Mapper.CreateMap<Source, Destination>();

var context = new MyDbContext();

var source = new Source();
var destination= context.Destinations.First();

Mapper.Map<Source, Target>(source, destination)

抛出:AutoMapper.AutoMapperMappingException:缺少类型映射配置或不支持的映射。

这有效:

Mapper.CreateMap<Source, Destination>();

var source = new Source();
var destination= new Destination();

Mapper.Map<Source, Target>(source, destination)

实体框架正在为我的Destination类创建一个动态代理类,这是它不起作用的原因吗?

没有目的地参数,它也可以工作,例如:

var destination = Mapper.Map<Source, Target>(source);

2 个答案:

答案 0 :(得分:1)

这是一个错误,并在AutoMapper的develop分支上修复。 AutoMapper的预发布版本有修复,或等待2.2.1版本。

答案 1 :(得分:0)

所以原因是ef创建了一个代理。当子类用作目标时发生异常。目标类型似乎必须与使用CreateMap<>定义的类型完全相同,派生类型不起作用。

DynamicMap<>似乎有效,所以我可能会使用它。