AutoMapper的AssertConfigurationIsValid和EF导航属性

时间:2019-10-26 09:42:19

标签: unit-testing automapper

我今天发现了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)

这是否有最佳实践?

0 个答案:

没有答案