Abp中分为自动属性映射,和自定义映射
我们新建一个Core层作为实体层,项目也要安装Abp Nuget Package
TestCase作为表的实体
我们先做自定义映射demo,
在Application层,新建一个创建TestCase的数据传输对象,用于创建实体时表单的传入,这里不需要id所以不用继承Entity
数据传输对象最好是需要就新建,不要相互之间继承,虽然这样可以减少代码,但是后面维护会困难。我们创建有创建的dto,更新有更新的dto,返回的有TestCaseDto,他们之间互相独立,不相互继承
创建一个返回数据的dto,一般展示层需要id,我们只要继承Entity 就可以了。
我们在dto文件夹中建一个TestCaseMapProfile类,它继承AutoMapper的Profile,在构造方法中,创建dto 之间的映射。
我们把之前的代码修改一下,让ITestCaseAppService继承IApplicationService接口。让TestCaseAppService继承ApplicationService,ApplicationService提供了一个ObjectMapper对象,我们可以用ObjectMapper对象在实体和数据传输对象之间转换。
在Application 中我们添加对AbpAutoMapper项目的引用,代码的作用是项目启动会先加载Application中所有继承Profile的类,用于做对象之间的自动映射。。
自动映射可以配置比较复杂的属性,具体可以查看AutoMapper的用法
除了自动映射,还有另外一种用于简单对象的属性映射
AutoMap的双向的,也就是TestCase 可以转成TestCaseEditDto,TestCaseEditDto也可以转成TestCase
AutoMapTo 只能 从TestCaseEditDto 转成TestCase
AutoMapFrom 只能 从TestCase 转成 TestCaseEditDto
用于 更新实体的数据传输对象,我们只要使用AutoMapTo就可以了,因为我们要从Dto映射成实体
这样就可以实现映射。但是在实际的项目中,我们只需要更新我们的TestCaseEditDto中定义的属性,原来的实体什么创建时间和创建人什么的都需要保留,
Abp 给我们提供了Map的另外一个重载方法,把原来旧实体需要保留的属性可以保留下来,只更改表单中传进来的属性,也就是我们需要更改的属性通过EditDto对外暴露