Я выбрал подход, очень похожий на тот, который использовал Джимми Богард в проекте CodeCampServer (http://codecampserver.codeplex.com/)
У меня есть общий класс Mapper, который я наследую, и мне просто нужно переопределитьМетод MapToModel, который отображается из ViewModel в модель домена, и метод GetIdFromViewModel, который возвращает правильный идентификатор из модели ViewModel, чтобы слой службы мог получить модель домена из базы данных.
Мне пришлось немного изменитьиз примеров CodeCampServer, потому что некоторые из моих Моделей использовали Guid, а некоторые использовали int в качестве Id для Модели.
Вы должны быть в состоянии получить код по ссылке codeplex выше, и это должно помочь вам в этом.direction.
Вот как выглядит один из моих Mappers для члена:
public class MemberMapper : AutoFormMapper<Member, MemberFormViewModel, Guid>, IMemberMapper
{
public MemberMapper(IMemberService service) : base(service) { }
protected override Guid GetIdFromViewModel(MemberFormViewModel viewModel)
{
return viewModel.MemberId;
}
protected override void MapToModel(MemberFormViewModel viewModel, Member model)
{
// if the need arises, we will need to map the full objects as Foreign Key properties
// by using the proper repositories
// right now for loading the object to save back to the DB we don't have that need, so let's not waste the call
model.MemberId = viewModel.MemberId;
model.FirstName = viewModel.FirstName;
model.LastName = viewModel.LastName;
model.Title = viewModel.Title;
model.EmailAddress = viewModel.EmailAddress;
model.DirectPhone = viewModel.DirectPhone;
model.MobilePhone = viewModel.MobilePhone;
model.ElectronicId = viewModel.ElectronicId;
model.ProjectRoleTypeId = viewModel.ProjectRoleTypeId;
model.DepartmentId = viewModel.DepartmentId;
}
}
Затем вы можете использовать этот MemberMapper для сопоставления обоих направлений. Он использует AutoMapper для перехода из модели домена.в модель представления, а затем использует метод MapToModel, который вы реализуете для сопоставления из модели представлениявернуться к модели домена.