C# AutoMapper不是';t识别特定于配置文件的前缀
我试图使用AutoMapper从属性名之前有前缀的类中获取数据,并将其映射到没有这些前缀的第二个类。但是,我不一定希望它总是去掉前缀:我只希望它为这个特定的映射这样做 我的源类如下所示:C# AutoMapper不是';t识别特定于配置文件的前缀,c#,.net,automapper,C#,.net,Automapper,我试图使用AutoMapper从属性名之前有前缀的类中获取数据,并将其映射到没有这些前缀的第二个类。但是,我不一定希望它总是去掉前缀:我只希望它为这个特定的映射这样做 我的源类如下所示: public class AdvancedSearchFilterDataModel { // .... public string ServiceMeterNumber { get; set; } // .... } [DataContract] public class Ser
public class AdvancedSearchFilterDataModel
{
// ....
public string ServiceMeterNumber { get; set; }
// ....
}
[DataContract]
public class ServicesAdvancedSearchFilterData : AdvancedSearchFilterData
{
// ....
[DataMember]
public string MeterNumber { get; set; }
// ....
}
public class PersonCustomMapping : ICustomMapping
{
const string separator = " ";
private static IMappingEngine _MappingEngine;
public IMappingEngine MappingEngine
{
get
{
if (_MappingEngine == null)
{
var configuration = new ConfigurationStore(new TypeMapFactory(), AutoMapper.Mappers.MapperRegistry.Mappers);
configuration.RecognizePrefixes("Person");
configuration.RecognizeDestinationPrefixes("Person");
configuration.CreateMap<Person, MCIACRM.Model.Combine.PersonCombined>();
configuration.CreateMap<MCIACRM.Model.Combine.PersonCombined, Person>();
_MappingEngine = new MappingEngine(configuration);
}
return _MappingEngine;
}
}
}
private IMappingEngine mappingEngine
{
get
{
if (_mappingEngine == null)
{
_mappingEngine = AutoMapper.Mapper.Engine;
}
return _mappingEngine;
}
}
我的目标类如下所示:
public class AdvancedSearchFilterDataModel
{
// ....
public string ServiceMeterNumber { get; set; }
// ....
}
[DataContract]
public class ServicesAdvancedSearchFilterData : AdvancedSearchFilterData
{
// ....
[DataMember]
public string MeterNumber { get; set; }
// ....
}
public class PersonCustomMapping : ICustomMapping
{
const string separator = " ";
private static IMappingEngine _MappingEngine;
public IMappingEngine MappingEngine
{
get
{
if (_MappingEngine == null)
{
var configuration = new ConfigurationStore(new TypeMapFactory(), AutoMapper.Mappers.MapperRegistry.Mappers);
configuration.RecognizePrefixes("Person");
configuration.RecognizeDestinationPrefixes("Person");
configuration.CreateMap<Person, MCIACRM.Model.Combine.PersonCombined>();
configuration.CreateMap<MCIACRM.Model.Combine.PersonCombined, Person>();
_MappingEngine = new MappingEngine(configuration);
}
return _MappingEngine;
}
}
}
private IMappingEngine mappingEngine
{
get
{
if (_mappingEngine == null)
{
_mappingEngine = AutoMapper.Mapper.Engine;
}
return _mappingEngine;
}
}
当我尝试像这样映射值时,它会起作用:
Mapper.Configuration.RecognizePrefixes("Service");
Mapper.CreateMap<AdvancedSearchFilterDataModel, ServicesAdvancedSearchFilterData>();
ServicesAdvancedSearchFilterData servciesFilterData =
Mapper.Map<ServicesAdvancedSearchFilterData>(model);
Mapper.Configuration.RecognizePrefixes(“服务”);
CreateMap();
服务高级搜索筛选器数据服务筛选器数据=
Mapper.Map(模型);
但我只希望“服务”被识别为某些映射的前缀,因为它在其他映射中也被用作属性名称的正常部分。我尝试使用配置文件处理此问题,但这不起作用--未映射任何数据:
Mapper.CreateProfile("ServicePrefix").RecognizePrefixes("Service");
Mapper.CreateMap<AdvancedSearchFilterDataModel, ServicesAdvancedSearchFilterData>()
.WithProfile("ServicePrefix");
ServicesAdvancedSearchFilterData servciesFilterData =
Mapper.Map<ServicesAdvancedSearchFilterData>(model);
Mapper.CreateProfile(“服务前缀”).RecognizePrefixes(“服务”);
Mapper.CreateMap()
.WithProfile(“服务前缀”);
服务高级搜索筛选器数据服务筛选器数据=
Mapper.Map(模型);
我怎样才能让它只在我想要的时候识别前缀,或者使用配置文件或者其他技术?(我还有其他前缀,我需要它以同样的方式识别其他映射。)我通过创建以下结构实现了此功能: 我的视图中有一个从PersonCombined展平的Person模型
public class PersonCombined
{
public Person Person { get; set; }
public Address DefaultAddress { get; set; }
public Contact EmailContact { get; set; }
public Contact PhoneContact { get; set; }
public Contact WebsiteContact { get; set; }
}
public class Person : IWebServiceModel
{
public int ID { get; set; }
public string PersonFirstName { get; set; }
public string PersonSurname { get; set; }
public string PersonDescription { get; set; }
public Nullable<bool> PersonIsActive { get; set; }
}
最后,在我的通用视图构造函数中,我有:
public GenericEntityController(IGenericLogic<S> logic, ICustomMapping customMapping)
: base()
{
this._mappingEngine = customMapping.MappingEngine;
this.logic = logic;
}
public GenericEntityController(IGenericLogic逻辑、ICustomMapping自定义映射)
:base()
{
这是._mappingEngine=customMapping.mappingEngine;
这个逻辑=逻辑;
}
我就是这样做的:
result=items.Project(mappingEngine.To()代码>
或
logic.Update(mappingEngine.Map(wsItem))代码>
因为每个视图使用1个实体,所以可以为每个实体定义自定义映射配置。
希望这有帮助谢谢。我最终以一种不同的方式实现了它,所以我无法测试它,也无法亲自验证它是否有效,但无论如何,我将尝试将它标记为“正确”,并希望它对下一个遇到这种情况的人有所帮助。以我的拙见,我发现这个解决方案达到了f***的复杂程度。我会手动完成。@JJS你能分享你实现它的不同方式吗?