我正在使用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))));