Ошибка Automapper после обновления записи классами POCO, Unity и EF6 - PullRequest
0 голосов
/ 13 декабря 2018

Я создал приложение, которое использует automapper, кажется, что все настроено и работает правильно в режиме просмотра, однако после обновления записи я получаю следующую ошибку отображения:

  AutoMapper.AutoMapperMappingException was unhandled by user code
  HResult=-2146233088
  Message=Missing type map configuration or unsupported mapping.
  Mapping types:
  Organisation -> ViewModelOrganisation

I 'Вы зарегистрировали Automamapper при запуске приложения:

protected void Application_Start()
    {
        App_Start.AutoMapperConfig.Initialize();
    }

Затем сделали сопоставление в Automapperconfig:

public class AutoMapperConfig
{

    public static void Initialize()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<Organisation, ViewModelOrganisation>().ReverseMap();
            cfg.CreateMap<Article, ViewModelArticle>().ReverseMap();
            cfg.CreateMap<Organisation, ViewModelAdminOrg>().ReverseMap();
            cfg.CreateMap<Branch, ViewModelBranch>().ReverseMap();
        });

    }

}

Это нажимает OK при запуске приложения, и я могу просматривать сайт.Проблема возникает, когда я сохраняю запись (обновление).Информация сохраняется, однако, когда я возвращаюсь на другую страницу для просмотра сайта, я получаю ошибки сопоставления.

Обновление:

Я сопоставляю в контроллере примерно так:

public ActionResult Detail(int id)
    {
        Organisation org = new Organisation();
        ViewModelOrganisation vm = new ViewModelOrganisation();
        org = _orgService.getOrganisationByOrgID(id);
        vm = Mapper.Map(org, vm);
        return View(vm);
    }

Ошибка в строке: vm = Mapper.Map (org, vm).Это также происходит на других страницах, которые используют картограф.Но только после того, как я обновил запись в своей админ-панели.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

До инициализации маппера в global.asa я делал это в самом контроллере.Мне не удалось удалить строку (ниже) из контроллера, где редактировалась запись статьи:

 Mapper.Initialize(cfg => cfg.CreateMap<Article, ViewModelArticle>());

Это должно было сделать недействительным отображение, созданное при запуске, и, следовательно, мою ошибку при переходе кпросмотрите остальную часть сайта.

Извлеченный урок ... Обязательно инициализируйте маппер только один раз!

0 голосов
/ 13 декабря 2018

Как говорится в вашем полном сообщении об исключении, преобразователь не имеет сопоставления от Organisation до ViewModelOrganisation.Я не уверен, но рядом с обратным отображением также не требуется нормальное отображение?Поэтому попробуйте добавить cfg.CreateMap<Organisation, ViewModelOrganisation>().

Также вы можете упростить свой код до этого:

public ActionResult Detail(int id)
{
    var org = _orgService.getOrganisationByOrgID(id);
    var vm = Mapper.Map<ViewModelOrganisation>(org);
    return View(vm);
}
...