AutoMapper将字符串映射到MS Dynamics CRM中的OptionSet值



我正在使用AutoMapper。我的源对象是简单的类

public class Source
    {
        public string FirstName { get; set; }
        public string type{ get; set; }
}

我的目的地是一个MS Dynamics CRM实体(我已经使用CrmSvctil生成了模型),其中包含一个选项集命名为类型。以下是我的映射

AutoMapper.Mapper.CreateMap<Source, Destination>()
               .ForMember(dest => dest.type, opt => opt.MapFrom(src => src.type)); 

我得到错误是类型不匹配

基本上我的问题是

我不知道如何使用AutoMapper将字符串映射到选项集值

optionset被存储为OptionSetValues,其Value属性类型为Int,而不是string,因此会出现类型不匹配错误。

如果你的类型是一个实际的int型,你只需要解析它:

AutoMapper.Mapper.CreateMap<Source, Destination>()
           .ForMember(dest => dest.type, opt => opt.MapFrom(src => new OptionSetValue(int.parse(src.type))));

但如果它是选项集的实际文本值,则需要使用OptionSetMetaData:

查找文本值
public OptionMetadataCollection GetOptionSetMetadata(IOrganizationService service, string entityLogicalName, string attributeName)
{
    var attributeRequest = new RetrieveAttributeRequest
    {
        EntityLogicalName = entityLogicalName,
        LogicalName = attributeName,
        RetrieveAsIfPublished = true
    };
    var response = (RetrieveAttributeResponse)service.Execute(attributeRequest);
    return ((EnumAttributeMetadata)response.AttributeMetadata).OptionSet.Options;
}
var data = GetOptionSetMetadata(service, "ENTITYNAME", "ATTRIBUTENAME");
AutoMapper.Mapper.CreateMap<Source, Destination>()
           .ForMember(dest => dest.type, opt => opt.MapFrom(src => new OptionSetValue(optionList.First(o => o.Label.UserLocalizedLabel.Label == src.type))));

相关内容

  • 没有找到相关文章

最新更新