C# AutoMaper使用自定义主键
有时候实际业务中主键不一定叫Id,比如示例数据库Northwind中的RegionID,TerritoryID等,本示例用Abp框架并以Northwind数据库Region表为数据依据
一、在Core领域层创建Region实体
using System.ComponentModel.DataAnnotations.Schema;
using Abp.Domain.Entities; namespace Blogs.Northwind
{
public class Region : Entity<int>
{
//定义数据库中实际列名
[Column("RegionId")]
//重写RegionId主键为ID
public override int Id { get; set; }
public string RegionDescription { get; set; }
}
}
二、DbContext增加DbSet属性
public DbSet<Region> Region { get; set; }
三、Application层创建Dto
using Abp.Application.Services.Dto; namespace Blogs.Northwind.Regions.Dto
{
public class RegionDto : EntityDto<int>
{
public string RegionDescription { get; set; }
}
}
四、创建RegionProfile并继承Profile,作为AutoMapper映射配置
using AutoMapper; namespace Blogs.Northwind.Regions.Dto
{
public class RegionProfile : Profile
{
public RegionProfile()
{
CreateMap<Region, RegionDto>(); //
}
}
}
五、创建IRegionAppService接口服务
using System.Threading.Tasks;
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using Blogs.Northwind.Regions.Dto; namespace Blogs.Northwind.Regions
{
public interface IRegionAppService : IApplicationService
{
Task<ListResultDto<RegionDto>> GetAllAsync();
}
}
六、实现RegionAppService
using System.Collections.Generic;
using System.Threading.Tasks;
using Abp.Application.Services.Dto;
using Abp.Domain.Repositories;
using Blogs.Northwind.Regions.Dto; namespace Blogs.Northwind.Regions
{
public class RegionAppService : BlogsAppServiceBase, IRegionAppService
{
private readonly IRepository<Region> _repository; public RegionAppService(IRepository<Region> repository)
{
_repository = repository;
}
public async Task<ListResultDto<RegionDto>> GetAllAsync()
{
var result = await _repository.GetAllListAsync(); //result为List<Region>类型
var model = ObjectMapper.Map<List<RegionDto>>(result); //ObjectMapper<目标>(源),把result(List<region>)转为List<RegionDto>类型
return new ListResultDto<RegionDto>(model);
}
}
}
七、测试结果达到预期

八、补充:显示结果为Id,正常应该为RegionId,需要做以下修改
//RegionDto
namespace Blogs.Northwind.Regions.Dto
{
public class RegionDto //取消继承EntityDto<T>继承后会自动添加<T>类型为Id的主键
{
public int RegionID { get; set; }
public string RegionDescription { get; set; }
}
}
//RegionProfile
using AutoMapper; namespace Blogs.Northwind.Regions.Dto
{
public class RegionProfile : Profile
{
public RegionProfile()
{
//创建映射配置CreateMap<源类型,转换后类型>().ForMember(转换后属性,从哪里转换)个人理解,把RegionDto Id属性作为映射条件转为Region RegionId属性
CreateMap<Region, RegionDto>().ForMember(dest=> dest.RegionID,opt=>opt.MapFrom(x=>x.Id));
}
}
}
执行结果如下,达到预期效果

C# AutoMaper使用自定义主键的更多相关文章
- Hibernate自定义主键
Hibernate自定义主键,通过此方法可以解决一此特殊的主键ID,在了解自定义主键时,先了解下Hibernate有自带的10种生成主键方法. 1) assigned主键由外部程序负责生成,无需Hib ...
- Spring boot JPA 用自定义主键策略 生成自定义主键ID
最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...
- Sql 插入自定义主键
在遇到数据库设计是自增的主键,且需要插入自定义的主键Id时,这个时候如果直接Insert的话,将会发生错误,错误提示信息: 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'XXX' ...
- oralce 获取自定义主键编码,有并发问题
F_GET_SEQUENCE,功能函数,当多个服务同时调用此函数,可能产生并发问题,待解决,加主键. CREATE OR REPLACE Function f_Get_Sequence(As_Comp ...
- SpringJPA主键生成采用自定义ID,自定义ID采用年月日时间格式
自定义主键生成策略 在entity类上添加注解 @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "custom ...
- Hibernate自定义简单主键生成
Hibernate自定义主键生成 当使用Hibernate定义pojo的时候,有时候需要生成一定规则的数据表主键,这时候我们可以采用自定义主键生成方式去生成主键. 例如: 1.在pojo属性中定义数据 ...
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- hibernate 注解 主键生成策略
一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue ...
- 大家一起撸代码之——Hibernate各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
随机推荐
- 使用html2canvas.js将HTML生成图片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- k8s入门你至少需要会哪些
body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...
- Javas数组03——数组的使用
Javas数组--数组的使用 1.普通的for循环 2.for-each循环 3.数组做方法入参 4.数组做返回值 例子1--普通for循环 package array; public clas ...
- .NetCore+Envoy+Id4+Dapr+EFCore 构建微服务之Envoy
.NetCore比较流行的微服务应该时是用Ocelot的方式构建微服务,纯配置化,开发量也比较小.但是做过一些项目之后发现这个方式不是很适合,首先它比较笨重,其次不支持gRpc和webSocket通信 ...
- (纯js)如何不刷新网页就能链接新的js文件
如何不刷新网页就能链接新的js文件,其实在HTML语言中已经有相关的函数了,就是再添加一个<script src=.....></script>. 函数叫document.bo ...
- 第5篇-调用Java方法后弹出栈帧及处理返回结果
在前一篇 第4篇-JVM终于开始调用Java主类的main()方法啦 介绍了通过callq调用entry point,不过我们并没有看完generate_call_stub()函数的实现.接下来在ge ...
- Python语言系列-03-文件操作和函数
## 深浅拷贝 #!/usr/bin/env python3 # author:Alnk(李成果) # 赋值运算 # 可变的数据类型:由于数据类型可变,修改数据会在原来的数据的基础上进行修改, # 可 ...
- 安全工具推荐之HackTools插件
朋友推荐 链接:https://github.com/LasCC/Hack-Tools 一款多合一Chromium类红队浏览器插件,火狐也有对应版本 功能包括: 动态反向Shell生成器(PHP.Ba ...
- 入门Kubernetes-StatefulSets
前言: 前面文中对通过DaemonSet.存储资源对象,实现了在指定节点中运行一个守护进程. 在真实的业务场景中,部署的服务都是有状态的.且有数据需要持久化的:那么如何实现呢? 那么接下来学习一种更加 ...
- Element Vue 开箱即用框架如何使用-测试开发【提测平台】阶段小结(二)
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 上一篇总结了后端服务接口的开发,这篇我们主要来总结下前后端分离开发中的前端部分,主要是开箱即用的框架介绍和之前章节组件的梳理和部分的扩展内 ...