自动映射器 - 使用方法更新不带资源库的 IEnumerable 属性



我在使用AutoMapper从数据传输对象映射到数据库实体模型时遇到了一些问题。该实体具有一些属性,这些属性是派生自 IEnumerable 的自定义数组类型。这些属性没有资源库,但有一个名为 SetFromString() 的方法可用。不过,我似乎无法正确配置我的地图来使用它。AutoMapper是否支持这种功能?如果有人能指出我正确的方向,我将不胜感激。

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

// 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语法。

public class ContactMappingProfile : Profile
{
    public ContactMappingProfile()
    {
        // This map works fine
        CreateMap<ContactEntity, ContactDto>();
        // Map from DTO to Entity            
        CreateMap<ContactDto, ContactEntity>()
            .ForMember(dest => dest.CustomerNumbers,
                opt => opt.ResolveUsing(src => src.CustomerNumbers));
    }
}

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

您可以使用

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

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

相关内容

  • 没有找到相关文章

最新更新