使用Global.asax自动映射自动映射

时间:2016-08-01 16:36:29

标签: c# automapper

我有一个从Global.asax调用的静态映射器类,它可以很好地映射简单的类:

的Global.asax:

AutoMapperConfiguration.Configure();

AutoMapperConfiguration:

Configure()
{
  Mapper.Initialize(cfg => { cfg.CreateMap<TMS.Entity.CourseSession, DataAccess.Entities.CourseSession>(); });
  Mapper.Initialize(cfg => {
    cfg.CreateMap<TMS.Entity.Course, DataAccess.Entities.Course>()

其中CourseSessionCourse

中的嵌套对象
public class Course 
{
  public ICollection<CourseSession> CourseSessionColl;

无论映射器中的内容如何,​​都会引发错误:

  

无法映射DataAccess.Entities.CourseSession上的以下属性:       CourseSessionColl

如果我忽略该属性,它会起作用:

Mapper.Initialize(cfg => {
            cfg.CreateMap<TMS.Entity.Course, DataAccess.Entities.Course>()
            .ForMember(o => o.CourseSessionColl, s => s.Ignore())

但如果我尝试映射它,它总会抛出错误。

编辑 - 添加了类

的示例

命名相同的类中的属性,并且我还有这个映射的映射:

namespace TMS.Entity
{
  public class Course
  {
    public ICollection<CourseSession> CourseSessionColl { get; set; }
    ...

------------------------------------------------

namespace DataAccess.Entities
{
  public class Course
  {
    public ICollection<CourseSession> CourseSessionColl { get; set; }

1 个答案:

答案 0 :(得分:1)

问题是您正在调用Initialize方法两次,第二次调用会覆盖第一个配置。您需要在同一配置中添加更多地图,而不是多次调用Initialize方法:

Mapper.Initialize(cfg => { 
cfg.CreateMap<TMS.Entity.CourseSession, DataAccess.Entities.CourseSession>();
cfg.CreateMap<TMS.Entity.Course, DataAccess.Entities.Course>(); });