答案 0 :(得分:5)
如果您决定不再忽略基类中的1,而是2,3或甚至更多属性,那么它会变得更加麻烦。在这种情况下,它可能对你没什么帮助,我肯定已经有9个月了,你可能已经找到了一个解决方案,但是为了其他任何绊倒这个问题的人的利益,扩展方法可以减少一些复杂性。
public static class MappingExtensions
{
public static IMappingExpression<Node, NodeDto> MapNodeBase<Node, NodeDto>(
this IMappingExpression<Node, NodeDto> mappingExpression)
{
// Add your additional automapper configuration here
return mappingExpression.ForMember(
dest => dest.ChildNodes,
opt => opt.Ignore()
);
}
}
然后你会这样称呼:
Mapper.CreateMap<Node, NodeDto>()
.MapNodeBase()
.Include<Place, PlaceDto>()
.Include<Asset, AssetDto>();
答案 1 :(得分:2)
答案 2 :(得分:2)
有一种更好的方法。对于我们的项目,我们创建了具有以下结构的mappings.xml文件。
<mappings>
<mapping name="EntityOne">
<configuration name="Flat">
<ignore name="ChildCollectionOne"/>
<ignore name="ChildCollectionTwo"/>
<ignore name="ChildCollectionThree"/>
</configuration>
<configuration name="Full">
<include name="ChildCollectionOne" configuration="Flat" type="One"/>
<include name="ChildCollectionTwo" configuration="Flat" type="Two"/>
<include name="ChildCollectionThree" configuration="Flat" type="Three"/>
</configuration>
</mapping>
</mappings>
特殊类AutoMapperUtilis用于从xml解析数据并根据给定规则配置Automapper。
通话是:
AutoMapperUtil.Init(typeof(EntityOne),typeof(EntityOneDto), AutoMapperUtilLoadType.Flat);
之后,将自动加载所有必需的映射,并忽略指定的ChildCollections。
使用此映射描述,我们可以根据我们的用例选择Flat或Full配置。我们使用AutoMapper在与Ria Services一起使用的nHibernate实体和Dto之间进行映射,我们对此解决方案非常满意。