使用 POCO 类、Unity 和 EF6 更新记录后出现 Automapper 错误
Automapper error after updating a record with POCO classes, Unity and EF6
我创建了一个使用 automapper 的应用程序,一切似乎都已配置并在浏览模式下正常工作,但是在我更新记录后,我收到以下映射错误:
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();
});
}
}
当应用程序启动时点击确定,我可以浏览网站。当我保存记录(更新)时出现问题。信息已保存,但是当我返回另一个页面浏览该站点时,出现映射错误。
更新:
我在控制器中的映射是这样的:
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)。它也发生在使用映射器的其他页面上。但只有在我更新管理面板中的记录之后。
正如您的完整异常消息所说,映射器没有从 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);
}
在 global.asa 中初始化映射器之前,我在控制器本身中执行此操作。我未能从控制器中删除正在编辑文章记录的行(下):
Mapper.Initialize(cfg => cfg.CreateMap<Article, ViewModelArticle>());
这一定会使启动时创建的映射失效,因此我在浏览站点的其余部分时出错。
经验教训...确保只初始化映射器一次!
我创建了一个使用 automapper 的应用程序,一切似乎都已配置并在浏览模式下正常工作,但是在我更新记录后,我收到以下映射错误:
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();
});
}
}
当应用程序启动时点击确定,我可以浏览网站。当我保存记录(更新)时出现问题。信息已保存,但是当我返回另一个页面浏览该站点时,出现映射错误。
更新:
我在控制器中的映射是这样的:
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)。它也发生在使用映射器的其他页面上。但只有在我更新管理面板中的记录之后。
正如您的完整异常消息所说,映射器没有从 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);
}
在 global.asa 中初始化映射器之前,我在控制器本身中执行此操作。我未能从控制器中删除正在编辑文章记录的行(下):
Mapper.Initialize(cfg => cfg.CreateMap<Article, ViewModelArticle>());
这一定会使启动时创建的映射失效,因此我在浏览站点的其余部分时出错。
经验教训...确保只初始化映射器一次!