Автоматическое отображение обернутого класса - PullRequest
1 голос
/ 27 января 2012

Мы хотим, чтобы в общем случае отображать из одной базы данных context.tableType в другую например UatDb.Branch - LiveDb.Branch

Таблицы идентичны, поэтому MapFrom не требуется.

Следующего общего определения соответствия достаточно

Mapper.CreateMap<TFromContextTableType,TToContextTableType>();

Однако !!!

Нам нужно обернуть исходный context.tableType в следующий класс-оболочку:

public class SWrapper<TFrom> where TFrom : class
{
        public SWrapper(TFrom model)
        {
            Model = model;
        }
        public TFrom Model { get; private set; }
}

Теперь, чтобы выполнить отображение, мы должны отобразить следующее:

Mapper.CreateMap<SWrapper<FromBranchType>, ToBranchType>().ConstructUsing(x => new        Live.Branch()))
.ForMember(d => d.BranchID, o => o.MapFrom(x => x.Model.BranchID))
.ForMember(d => d.BranchName, o => o.MapFrom(x => x.Model.BranchName))
.ForMember(d => d.BranchCountry, o => o.MapFrom(x => x.Model.BranchCountry))

Это означает, что мы не можем в общем отображать и должны явно объявлять ForMember для каждого отображения. Я не могу найти какое-либо решение с помощью резольверов или преобразователей типов.

Я подумал о том, чтобы, возможно, обернуть цель в SWrapper, а затем разрешить возвращенный объект Wrapped для возврата внутреннего продукта, но не уверен, как это сделать.

Все идеи приветствуются ....

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Используя свое сопоставление, вы можете выполнить следующее, не требуя ввода всех сопоставлений свойств вручную.Вспомогательный метод во втором тесте учитывает специализированное отображение, которое вам может не понадобиться.

0 голосов
/ 02 февраля 2012

Как насчет добавления небольшого служебного метода в класс-оболочку:

public TDest MapTo<TDest>()
{
    return Mapper.Map<TFrom, TDest>(this.Model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...