Ошибка инициализации автоперсонала с асинхронными вызовами

Я использую auto mapper в своем приложении, но я страдаю много, я применяю ниже Tier-Architecture:

  1. DAL Layer (проект библиотеки классов) здесь я использую Auto mapper
  2. BLL Layer (проект библиотеки классов)
  3. Уровень обслуживания (проект Web Api)
  4. Веб-приложение (проект веб-сайта)

В моем проекте 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;
    }

Что не так, я здесь?

c#,automapper,

0

Ответов: 2


0

Я думаю, вы должны привязать свои глобальные конфигурации, включая конфигурации AutoMapper в точке входа приложения, например Application_Start () AutoMapperConfiguration.ConfigureEntityMapping();для веб-api. Идеализация конфигурации картографа будет отображаться один раз для приложения и в одном месте.


0

Что не так, я здесь?

Вы вызываете (Mapper.Initialize)многократные вызовы, когда это Application_Startдолжно быть одноразовое дело для создания метаданных конфигурации

что вы будете делать?

Назовем это один раз в Global.asaxин Global.asaxи оттуда все отображения Automapper подобрать действительное отображение между типами для преобразования

C #, automapper,
Похожие вопросы