Я использую auto mapper в своем приложении, но я страдаю много, я применяю ниже Tier-Architecture:
- DAL Layer (проект библиотеки классов) здесь я использую Auto mapper
- BLL Layer (проект библиотеки классов)
- Уровень обслуживания (проект Web Api)
- Веб-приложение (проект веб-сайта)
В моем проекте App я вызываю Back end (Webapi) с помощью ajax-вызовов, и я вызываю несколько вызовов на одном экране, чтобы получить необходимые требуемые данные. И вот моя проблема: инициализация auto-mapper иногда работает отлично, а в некоторых других дайте мне следующую ошибку:
Exception = AutoMapper.AutoMapperMappingException
Message = Missing type map configuration or unsupported mapping.
FullText = AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping
Я устраняю проблему и замечаю, что основная масса вызовов идет на задний план в одно и то же время (асинхронно), и они переопределяют инициализацию друг для друга, вызывающую проблему.
Я пробовал много подходов для решения проблемы, как объединить всю инициализацию в один класс
public static void ConfigureEntityMapping()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Notification, NotificationModel>();
cfg.CreateMap<User, UserModel>();
cfg.CreateMap<LK_Status, StatusModel>();
cfg.CreateMap<CorrespondenceType, CorrespondenceTypeModel>();
cfg.CreateMap<Correspondence, CorrespondenceModel>().ForMember(dest => dest.StatusModel, opt => opt.MapFrom(src => src.LK_Status))
.ForMember(dest => dest.CorrespondenceTypeModel, opt => opt.MapFrom(src => src.CorrespondenceType))
.ForMember(dest => dest.CurrentAssignedUserModel, opt => opt.MapFrom(src => src.CurrentAssignedUser))
.ForMember(dest => dest.CheckoutByUserModel, opt => opt.MapFrom(src => src.CheckoutByUser));
});
}
но это не сработало.
вот мой пример кода вызванных слоев DAL
public static CorrespondenceModel GetByID(int ID)
{
using (Entities db = new Entities())
{
var correspondence = db.Correspondences.Find(ID);
if (correspondence != null)
{
AutoMapperConfiguration.ConfigureEntityMapping();
CorrespondenceModel correspondenceModel = Mapper.Map<Correspondence, CorrespondenceModel>(correspondence);
return correspondenceModel;
}
}
return null;
}
а также
public static List<NotificationModel> GetAllByUserID(int loggedUserID)
{
using (ZajelEntities db = new ZajelEntities())
{
List<NotificationModel> NotificationModel = new List<NotificationModel>();
var corresondences = db.Notifications.Where(n => n.UserID == loggedUserID);
if (corresondences != null)
{
AutoMapperConfiguration.ConfigureEntityMapping();
foreach (var item in corresondences)
{
NotificationModel model = Mapper.Map<Notification, NotificationModel>(item);
NotificationModel.Add(model);
}
return NotificationModel;
}
}
return null;
}
Что не так, я здесь?