对象到对象映射¶
将对象映射到另一个对象是常用并且繁琐重复的工作,大部分情况下两个类都具有相同或相似的属性. ABP 提供了对象到对象映射的抽象并集成了AutoMapper做为对象映射器.
AutoMapper 集成¶
AutoMapper 是最流行的对象到对象映射库之一. Volo.Abp.AutoMapper程序包使用 AutoMapper 实现了 IObjectMapper.
定义映射¶
AutoMapper 提供了多种定义类之间映射的方法. 有关详细信息请参阅AutoMapper 的文档.
其中定义一种映射的方法是创建一个Profile 类. 例如:
| C# | |
|---|---|
然后使用AbpAutoMapperOptions注册配置文件:
AddMaps 注册给定类的程序集中所有的配置类,通常使用模块类. 它还会注册 attribute 映射.
配置验证¶
AddMaps 使用可选的 bool 参数控制模块的配置验证:
| C# | |
|---|---|
如果此选项默认是 false , 但最佳实践建议启用.
可以使用 AddProfile 而不是 AddMaps 来控制每个配置文件类的配置验证:
| C# | |
|---|---|
如果你有多个配置文件,并且只需要为其中几个启用验证,那么首先使用
AddMaps而不进行验证,然后为你想要验证的每个配置文件使用AddProfile.
映射对象扩展¶
对象扩展系统 允许为已存在的类定义额外属性. ABP 框架提供了一个映射定义扩展可以正确的映射两个对象的额外属性.
| C# | |
|---|---|
如果两个类都是可扩展对象(实现了 IHasExtraProperties 接口),建议使用 MapExtraProperties 方法. 更多信息请参阅对象扩展文档.
其他有用的扩展方法¶
有一些扩展方法可以简化映射代码.
忽视审计属性¶
当你将一个对象映射到另一个对象时,通常会忽略审核属性.
假设你需要将 ProductDto (DTO)映射到 Product实体,该实体是从 AuditedEntity 类继承的(该类提供了 CreationTime, CreatorId, IHasModificationTime 等属性).
从 DTO 映射时你可能想忽略这些基本属性,可以使用 IgnoreAuditedObjectPropertie() 方法忽略所有审计属性(而不是手动逐个忽略它们):
| C# | |
|---|---|
还有更多扩展方法, 如 IgnoreFullAuditedObjectProperties() 和 IgnoreCreationAuditedObjectProperties(),你可以根据实体类型使用.
请参阅实体文档中的"基类和接口的审计属性"部分了解有关审计属性的更多信息。
忽视其他属性¶
在 AutoMapper 中,通常可以编写这样的映射代码来忽略属性:
| C# | |
|---|---|
我们发现它的长度是不必要的并且创建了 Ignore() 扩展方法:
| C# | |
|---|---|