В проекте I ' В процессе работы мы сопоставляем автоматически сгенерированные DTO бизнес-объектам. База данных имеет кхм необычное (но в значительной степени согласованное) соглашение об именах, что означает, что можно преобразовать большинство имен свойств DTO в их эквивалентные имена свойств бизнес-объектов, таким образом сэкономив много строк кода.
Для Например, в DTO (и базе данных) у нас есть свойство с именем account_ID__created
, которое будет отображаться на свойство BO с именем CreatedAccountId
. Подобное преобразование происходит в MemberNameTransformer.GetBoMemberName ()
, так что это не так просто, как несколько иное соглашение с другим разделителем.
Следуя тому, что есть в исходном коде AutoMapper, я я считаю это лучшим предположением:
public class DtoBoMappingOptions : IMappingOptions
{
public INamingConvention SourceMemberNamingConvention
{
get { return new PascalCaseNamingConvention(); }
set { throw new NotImplementedException(); }
}
public INamingConvention DestinationMemberNamingConvention
{
get { return new PascalCaseNamingConvention(); }
set { throw new NotImplementedException(); }
}
public Func<string, string> SourceMemberNameTransformer
{
get { return s => s; }
set { throw new NotImplementedException(); }
}
public Func<string, string> DestinationMemberNameTransformer
{
get { return MemberNameTransformer.GetBoMemberName; }
set { throw new NotImplementedException(); }
}
}
Теперь, как мне сказать Mapper использовать эти параметры при сопоставлении SomeDto с SomeBusinessClass? Я понимаю, что у меня может быть неправильный интерфейс в IMappingOptions. Настоящая суть того, что я пытаюсь выполнить, находится в MemeberNameTransformer.GetBoMemberName ()
.
Дополнительная благодарность: Как я могу сказать Mapper использовать эти параметры при отображении любого IDto для IBusinessObject?