我今天发现了AutoMapper的Configuration Validation feature,它看起来非常有前途。使用它,我应该能够摆脱我们为AutoMapper配置文件编写的所有手动编写的单元测试。我们使用AutoMapper在Entity Framework实体类和View Model类之间进行映射。
假设我有以下实体:
public class Article
{
public int Id { get; set; }
public string Name { get; set; }
public int TypeId { get; set; }
[ForeignKey("TypeId")]
[InverseProperty("Article")]
public ArticleType Type { get; set; }
}
以及相应的视图模型:
public class ArticleViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public int TypeId { get; set; }
public string TypeName { get; set; }
}
为了简洁起见,我省略了ArticleType。
现在,在我的AutoMapper个人资料中,我将具有以下映射:
CreateMap<ArticleViewModel, Article>()
CreateMap<Article, ArticleViewModel>()
.ForMember(dest => dest.TypeName, options => options.MapFrom(src => src.Type.Name))
如果我在其中使用此配置文件的AssertConfigurationIsValid
上调用MapperConfiguration
,则AutoMapper将抱怨Type
未映射。是的,但是我不需要映射它,因为Entity Framework会从外键TypeId
中自动找出它。
我知道我可以为Type
添加一个忽略,以消除此错误:
CreateMap<ArticleViewModel, Article>()
.ForMember(dest => dest.Type, options => options.Ignore())
但是我们拥有的实体具有很多其他实体的导航属性,因此不得不忽略它们全部变得乏味。
我想到的另一种选择是使用源的成员来验证映射,如下所示:
CreateMap<ArticleViewModel, Article>(MemberList.Source)
这是否有最佳实践?