我在标准的分层结构中使用了以下接口和DTO:
public interface IPageView {
IPageView Parent { get; set; }
ICollection<IPageView> Children { get; set; }
}
这是使用以下具体类实现的:
public class PageView : IPageView {
IPageView Parent { get; set; }
ICollection<IPageView> Children { get; set; }
}
为简洁起见,我省略了其他属性和构造函数。我正在使用Automapper从我的Page
EF POCO实体映射到界面DTO,其中包含以下内容:
AutoMapper.Mapper.CreateMap<Page, IPageView>().As<PageView>();
当AutoMapper尝试创建地图时,我收到以下异常:
无法映射Pipeline.CMS.Contracts.UI.IPageView上的以下属性: 网页 添加自定义映射表达式,忽略,添加自定义解析程序或修改目标类型Pipeline.CMS.Contracts.UI.IPageView。 语境: 映射到属性页面从Model.Page到Interfaces.IPageView 从System.Collections.Generic.ICollection
1[[Model.Page,Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] to System.Collections.Generic.ICollection
映射到属性页1 [[Interfaces.IPageView,Interfaces,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]] 从ModelPage类型映射到Interfaces.IPageView 抛出了“AutoMapper.AutoMapperConfigurationException”类型的异常。
显然这是因为AutoMapper无法映射IPageView,因为它尚未映射!
我的问题是如何解决这个问题?我不介意在AutoMapper配置中指定具体的类。
答案 0 :(得分:1)
上面的代码似乎没问题且问题与层次结构无关,但是需要在原始源对象和As
方法中的对象之间创建地图。对于上述情况,它将是:
AutoMapper.Mapper.CreateMap<Page, PageView>(); // Additional line here needed
AutoMapper.Mapper.CreateMap<Page, IPageView>().As<PageView>();