Я установил пакет nuget AutoMapper.Extensions.Microsoft.DependencyInjection и использую .NET Core 3.1. Согласно документации (https://docs.automapper.org/en/stable/Configuration.html) я должен иметь возможность добавлять префиксы к именам своих свойств. Но когда я сопоставляю свои два класса, свойства с префиксом равны нулю. У меня есть абстрактный класс с несколькими свойствами, которые расширены до моей модели UserDto. Затем я сопоставляю модель UserDto с моей моделью UserEntity, которая не имеет абстрактного класса. Моя модель UserEntity использует префикс User для каждого свойства, например. UserId, UserName, в то время как мой UserDto использует только идентификатор, имя и т. д. Я регистрирую AutoMapper и добавляю свою конфигурацию следующим образом:
#region Auto Mapper
services.AddAutoMapper(config =>
{
config.RecognizePrefixes(new[] { "User", "Role", "Language" });
config.AddProfile(new DtoToEntityProfile());
config.AddProfile(new ContractToDtoProfile());
}, typeof(Startup));
#endregion
Я добавил свои профили в конфигурацию, чтобы посмотреть, будет ли это работать. Раньше Automapper также мог автоматически находить мои профили, сканируя файл Assembly. Что мне нужно сделать, чтобы сопоставить мой Dto с моей моделью Entity без сопоставления каждого свойства вручную?
Изучив функции и свойства в классе Profile Auto Mapper, я обнаружил, что существуют функции RecognizePrefixes и RecognizeDestinationPrefixes, функция RecognizePrefixes удаляет только префиксы из источника, а функция RecognizeDestinationPrefixes удаляет только префиксы из пункта назначения.
Таким образом, имя RecognizePrefixes вводит в заблуждение. Я исправил свою проблему, внедрив свою конфигурацию следующим образом:
#region Auto Mapper
services.AddAutoMapper(config =>
{
config.RecognizeDestinationPrefixes(new[] { "User", "Role", "Domain", "Language" });
config.RecognizePrefixes(new[] { "User", "Role", "Domain", "Language" });
}, typeof(Startup));
#endregion