我采用了一种非常类似于JimmyBogard在codeCampserver项目中使用的方法。(
http://codecampserver.codeplex.com/
)
我继承了一个普通的mapper类,在这个类中,我只需要重写一个从viewModel映射到域模型的maptoModel方法,以及一个从viewModel返回正确ID的getidFromViewModel方法,以便服务层可以从数据库中获取域模型。
我不得不对codeCampserver示例做一些修改,因为我的一些模型使用guid,一些模型使用int作为模型的ID。
您应该能够从上面的codeplex链接中获取代码,这将帮助您朝着这个方向前进。
下面是我的成员映射器的外观:
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;
}
}
然后可以使用此成员映射器映射两个方向。它使用automapper从域模型转到视图模型,然后使用您实现的maptoModel方法从视图模型映射回域模型。