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))

而且,如您所见,我正在尝试将 Property 映射DateFromClass.Date到 destination 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”类型的异常。

有什么建议么?

4

1 回答 1

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 在查看引导程序以应用任何自定义逻辑之前不会查看名称和类型。

于 2012-08-28T18:40:07.053 回答