使用POCO类,Unity和EF6更新记录后的自动映射器错误

时间:2018-12-13 12:06:03

标签: c# asp.net-mvc automapper poco

我已经创建了一个使用自动映射器的应用程序,所有内容似乎都已配置并且可以在浏览模式下正常工作,但是更新记录后,我将收到以下映射错误:

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

我已经在应用程序启动中注册了自动翻译程序:

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();
        });

    }

}

在应用程序启动时单击确定,我可以浏览该站点。当我保存记录(更新)时,会出现问题。信息会保存,但是当我返回另一个页面浏览站点时,会出现映射错误。

更新

在控制器中的Im映射如下:

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 :(得分:0)

正如您的完整异常消息所述,映射器没有从OrganisationViewModelOrganisation的映射。我不确定,但是在反向映射旁边还不需要法线映射吗?因此,请尝试添加cfg.CreateMap<Organisation, ViewModelOrganisation>()

您还可以将代码简化为:

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

答案 1 :(得分:0)

在global.asa中初始化映射器之前,我是在控制器本身中执行此操作的。我未能从正在编辑文章记录的控制器中删除以下行:

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

这一定会使启动时创建的映射无效,因此在我浏览网站的其余部分时出现了错误。

经验教训...确保仅初始化一次映射器!