Сегодня я обнаружил функцию проверки конфигурации AutoMapper , и она выглядит очень многообещающе. С его помощью я смогу избавиться от всех написанных вручную модульных тестов для наших профилей 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
.
Я знаю, что могу добавить Ignore для Type
, как показано ниже, кизбавиться от этой ошибки:
CreateMap<ArticleViewModel, Article>()
.ForMember(dest => dest.Type, options => options.Ignore())
Но у нас есть сущности с множеством навигационных свойств для других сущностей, и необходимость их игнорирования становится утомительной.
Другая альтернатива, которую я предложилсостоит в использовании членов источника для проверки соответствия, например:
CreateMap<ArticleViewModel, Article>(MemberList.Source)
Есть ли лучший метод для этого?