Я пытаюсь создать соглашения Automapper для сопоставления между DTO со свойствами верхнего регистра со знаками подчеркивания и бизнес-POCO, которые являются символом паскаля.
Я хочу сделать это без явного вызова CreateMap
для каждого класса, так какправила отображения везде одинаковы.
DTO имеют префикс "T _".
// DTO
public class T_ACCOUNT
{
public int ID { get; set; }
public int? PROFILE_ID { get; set; }
public bool DELETED { get; set; }
public string EMAIL { get; set; }
public bool IS_EMAIL_CONFIRMED { get; set; }
public DateTime TIME { get; set; }
}
// business model
public class Account
{
public int Id { get; set; }
public int? ProfileId { get; set; }
public bool Deleted { get; set; }
public string Email { get; set; }
public bool IsEmailConfirmed { get; set; }
public DateTime Time { get; set; }
}
Поэтому я создаю маппер следующим образом.
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new DtoToBusinessProfile());
});
IMapper mapper = new Mapper(config);
Профиль выглядитвот так.
public class DtoToBusinessProfile : Profile
{
public DtoToBusinessProfile()
{
// this should match mapping between "Account" and "T_ACCOUNT"
AddConditionalObjectMapper()
.Where((s, d) =>
{
return s.Name == d.Name.Substring(2).Pascalize();
});
// Now what?
}
}
Я создал запрос функции в Automapper github, поскольку Я не смог заставить работать INamingConvention
интерфейс .
Мне сказали, что то, что я хочу, также возможно с помощью ForAllMaps
, но я понятия не имею, что с этим делать.