Свойства навигации AssertConfigurationIsValid и EF в AutoMapper - PullRequest
0 голосов
/ 26 октября 2019

Сегодня я обнаружил функцию проверки конфигурации 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)

Есть ли лучший метод для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...