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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的asp.Net相关文章