asp.net-mvc – automapper,你在哪里放置代码将View Model映射到Entity

我的mvc3项目有以下图层.

控制器 – >服务 – >库.

我需要将viewmodel映射到Entity,不确定哪个层是放入代码的正确层.

我知道它的控制器或服务,请让我知道我应该使用哪一个,如果可以,请告诉我原因.

谢谢.

解决方法

I need to map viewmodel to Entity,not sure which layer is the right one to put the code in.

控制器当然.服务和存储库层不知道视图模型的含义.他们只操纵领域模型.

所以在控制器内你使用.Map< TSource,TDest>调用在域模型和视图模型之间来回进行映射.但映射定义本身(.CreateMap< TSource,TDest> call)每AppDomain生命周期完成一次,理想情况下在Profile中.

因此,让我们在RESTful术语中考虑控制器操作中的几个典型工作流

GET(以RDBMS术语表示):

> controller查询服务层以检索域模型(在大多数情况下是聚合根)
> controller调用映射层将域模型映射到视图模型
> controller将视图模型传递给视图

PUT(以RDBMS术语插入):

> controller从视图中接收视图模型作为action参数
> controller将视图模型映射到域模型
> controller将域模型传递给服务层进行处理
> controller重定向到GET操作

DELETE(以RDBMS术语删除)

> controller接收id作为动作参数
> controller将id传递给服务层进行处理(删除)
> controller重定向到GET操作

POST(以RDBMS术语更新):

> controller从视图中接收视图模型作为action参数
> controller查询服务层以获取我们想要使用视图模型中包含的唯一ID更新的域模型
> controller仅更新检索到的域模型的属性,这些属性也存在于视图模型中.例如,域模型可能包含Username和IsAdmin属性,视图模型显然只包含Username属性.因此,我们保持域模型上的IsAdmin属性不变,并更新Username属性.在AutoMapper术语中,这转换为.Map< TSource,TDest>的以下void重载.方法:Mapper.Map< ADomain,viewmodel>(domainInstanceControllerRetrievedUsingTheId,viewmodelInstancePassedAsArgument);
> controller将更新的域模型传递给服务层进行处理(更新)
> controller重定向到GET操作

有了这4个工作流程,您就可以为CRUD世界做好准备了.

附: REST提醒:

Create = PUT
Retrieve = GET
Update = POST
Delete = DELETE

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...