AutoMapper Master详细信息映射

时间:2014-03-17 15:55:08

标签: entity-framework automapper

我们使用AutoMapper将业务实体映射到数据实体,反之亦然。有两个类,我们希望在其上对数据库进行更新。

ImportConfiguration

[DataContract]
public class ImportConfiguration : FileType
{
    [DataMember]
    public Guid ImportConfigurationID { get; set; }
    [DataMember]
    public string FileMask { get; set; }
    [DataMember]
    public virtual List<OrderConfiguration> OrderConfigurations { get; set; }
}

OrderConfiguration

[DataContract]
public class OrderConfiguration 
{
    [DataMember]
    public Guid OrderConfigurationID { get; set; }
    [DataMember]
    public Guid ImportConfigurationID { get; set; }
    [DataMember]
    public string OrderConfigData{ get; set; }
}

以下是从Business实体到ImportConfiguration的数据实体的映射。

 Mapper.CreateMap<ImportConfiguration, Data.Entities.ImportConfigurations>()
              .ForMember(d => d.OrderConfigurations, o => o.UseDestinationValue());

但是当我们通过

创建映射时
var newDbconfig = Mapper.Map<ImportConfiguration, Data.Entities.ImportConfigurations>(newBoConfig);

引发以下错误消息:

错误消息:

EntityCollection已初始化。只应调用InitializeRelatedCollection方法在反序列化对象图时初始化新的EntityCollection。

1 个答案:

答案 0 :(得分:0)

核心问题来自于您不应该设置EntityCollection,这是映射中发生的事情。该集合由其持有者管理,您只应向其添加对象。

由于您希望基本上忽略目标值(保留目标值),因此只需对Ignore()

的选项使用ImportConfigurations方法

如果您需要对AfterMap

采取行动,可以使用EntityCollection方法添加自定义行为