Я настроил AutoMapper «AutoMapper.Extensions.Microsoft.DependencyInjection Version 7.0» в моем приложении веб-API следующим образом; Я получаю сообщение об ошибке сопоставления конфигурации карты типов.
Запускать
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version public UserProfile()
{
CreateMap<User, UserDataView>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(dataModel => dataModel.Id))
.ForMember(dest => dest.Title, opt => opt.MapFrom(dataModel => dataModel.Title))
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(dataModel => dataModel.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(dataModel => dataModel.LastName))
.ForMember(dest => dest.ActivationDate, opt => opt.MapFrom(dataModel => dataModel.ActivationDate));
//CreateMap<User, UserDataView>()
// .ReverseMap();
}
2);
services.AddDbContext<SupplierContext>(options =>
options.UseInMemoryDatabase(databaseName: "MyDatabase"));
services.AddTransient<IAppService, AppService>();
var profiles = from type in typeof(Startup).Assembly.GetTypes()
where typeof(Profile).IsAssignableFrom(type)
select (Profile)Activator.CreateInstance(type);
var mapConfig = new MapperConfiguration(cfg =>
{
foreach (var profile in profiles)
{
cfg.AddProfile(profile);
}
});
var mapper = mapConfig.CreateMapper();
services.AddSingleton(mapper);
}
Я создал профиль в главном API проекта в папке
профиль
public UserProfile()
{
CreateMap<User, UserDataView>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(dataModel => dataModel.Id))
.ForMember(dest => dest.Title, opt => opt.MapFrom(dataModel => dataModel.Title))
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(dataModel => dataModel.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(dataModel => dataModel.LastName))
.ForMember(dest => dest.ActivationDate, opt => opt.MapFrom(dataModel => dataModel.ActivationDate));
//CreateMap<User, UserDataView>()
// .ReverseMap();
}
Класс пользователя
public class User
{
public Guid Id { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime ActivationDate { get; set; }
}
Когда я пытаюсь сопоставить данные модели с Dto, я получаю ошибку конфигурации отсутствующей карты типов.
Ошибка
Missing type map configuration or unsupported mapping.
Mapping types:
Task`1 -> List`1
System.Threading.Tasks.Task`1[[System.Collections.Generic.List`1[[MyApp.Model.User.User, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea70000]] -> System.Collections.Generic.List`1[[MyApp.Model.DTOs.UserDataView, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
Автоматическое сопоставление
var UserDataModel = (from user in _context.Users
join email in _context.Emails on user.Id equals email.userId into se
join phone in _context.Phones on user.Id equals phone.userId into sp
select new User
{
Id = user.Id,
Title = user.Title,
FirstName = user.FirstName,
LastName = user.LastName,
ActivationDate = user.ActivationDate,
}).ToListAsync();
var dataResult = _mapper.Map<List<UserDataView>>(UserDataModel);