2012-08-27 57 views
0

基本上,我有一个DateTime在一个类中的“表面”和另一个DateTime是另一个类的复杂属性中的类的一部分,我想映射回来和这些DateTime类型之间来回...映射日期时间从/到子属性日期时间

public class AModel { 
    DateTime DateFrom { get;set; } 
    DateTime DateThru { get;set; } 
} 
public class BModel { 
    ModelDateCollection DateFromClass { get;set; } 
    ModelDateCollection DateThruClass { get;set; } 
} 
public class ModelDateCollection { 
    DateTime Date { get;set; } 
    String Display { get; } // Example Readonly for Date Display 
    DateTime FirstOfMonth { get; } // Another Example to extend Complex Class 
} 

在地图的初始化我使用:

CreateMap<BModel, AModel>() 
      .ForMember(d => d.DateFrom, s => s.MapFrom(src => src.DateFromClass.Date)) 

而且,正如你所看到的,我试图物业DateFromClass.Date映射到目标DateFrom

我还打算在其他方向映射,以及:

CreateMap<AModel, BModel>() 
      .ForMember(d => d.DateFrom, s => s.MapFrom(src => new ModelDateCollection(src.DateFrom))) 

根据下面的异常,我不能够为这些是DateTime值来回映射。

无法转换类型“System.DateTime的”到类型 “ModelDateCollection” - >试图AMODEL映射到BModel 使用映射配置为AMODEL到BModel 异常类型“AutoMapper.AutoMapperMappingException”的目的是抛出。

有什么建议吗?

+2

你能得到内部异常并发布输出吗?通常,如果您在处理Automapper时发现异常,它会让您更好地了解该问题。 –

+0

另外,你可以显示你正在映射的类的定义,以便我们可以重现它吗? –

回答

0

好的......这一切都已经解决了。原来,这个例子稍微偏离了一点,因为我不确定这个问题。正如你将在我的类定义中看到的,DateFrom & DateFromClass共享不同的名字......在我的例子中,它们实际上具有相同的名称......所以,新的类结构如下:

public class AModel { 
    DateTime DateFrom { get;set; } 
    DateTime DateThru { get;set; } 
} 
public class BModel { 
    ModelDateCollection DateFrom { get;set; } 
    ModelDateCollection DateThru { get;set; } 
} 
public class ModelDateCollection { 
    DateTime Date { get;set; } 
    String Display { get; } // Example Readonly for Date Display 
    DateTime FirstOfMonth { get; } // Another Example to extend Complex Class 
} 

即使类型不同,Automapper首先需要将具有一个名称的项目映射到具有相同名称的匹配成员......不管类型如何!所以,痛苦的答案只是重命名属性,如果你要去尝试映射...当前Automapper在查看你的引导程序来应用任何自定义逻辑之前,不会查看名称和类型。