AutoMapper - 使用方法更新没有setter的IEnumerable属性?

时间:2017-10-18 13:45:40

标签: c# automapper

我在使用AutoMapper从数据传输对象映射到数据库实体模型时遇到了一些麻烦。该实体有一些属性是自定义数组类型,派生自IEnumerable。这些属性没有setter,但有一个名为@ARTICLE{Abazajian2003, year = 2003, volume = 203, volume = 203, @ARTICLE{Alexander2003, year = 2003, @ARTICLE{Anderson2003, year = 2003, @INPROCEEDINGS{Antonucci2003, year = 2003, @ARTICLE{Baes2003, year = 2003, year = 2003, 的方法可用。我似乎无法正确配置我的地图以使用它。 AutoMapper是否支持这种事情?如果有人能指出我正确的方向,我会很感激。

以下是我正在使用的关键类的简化版本。 (从实体到DTO,映射工作得很好,但我也需要它反向工作。)

SetFromString()

我的映射配置文件仍然很香草,因为我无法绕过正确的// The database entity public class ContactEntity { public CustomArray<String> CustomerNumbers { get; } } // The data transfer object public class ContactDto { public List<String> CustomerNumbers { get; set; } } // CustomArray definition public abstract class CustomArray<DataType> : IEnumerable<DataType>, IDisposable { protected CustomArray(); public abstract void SetFromString(string Value); } 语法。

ForMember

再次感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用UseDestinationValueIgnore作为目标实体CustomerNumbers成员,并在AfterMap中执行实际映射:

cfg.CreateMap<ContactDto, ContactEntity>()
    .ForMember(dest => dest.CustomerNumbers, opt => opt.Ignore())
    .AfterMap((src, dest) => dest.CustomerNumbers.SetFromString(string.Join(",", src.CustomerNumbers)));