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和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
随机推荐
- 苹果手机点击输入框input 页面放大 超出屏幕问题
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale ...
- “入职一年,那个被高薪挖来的Android开发被劝退了。”
其实,在很多小伙伴的想法中,是希望通过跳槽实现薪酬涨幅,可是跳槽不是冲动后决定,应该谨慎啊~ 01 我的学弟,最近向我吐槽,2020 年上半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满 ...
- Salesforce Integration 概览(七) Data Virtualization数据可视化
本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf Salesforc ...
- git连接远程GitHub仓库详细总结 for HTTPS协议
简单唠叨几句哈.之前工作的时候,由于是在大厂,代码提交.版本管理都是多人协作的,所以公司当时用的git + gerrit来实现代码管理的.当时入职时并不懂git的使用,虽然有大神写好配置git的文档, ...
- Golang语言系列-16-context上下文
context上下文 控制子goroutine退出 全局变量方式 package main import ( "fmt" "sync" "time&q ...
- MySQL记录之间是单向链表还是双向链表?
前言 本文的观点是基于MySQL使用Innodb存储引擎的情况下进行的! 很多渠道说:MySQL数据按照主键大小依次排列,记录之间是双向链表连起来.如果说我告诉你这种说法很大程度上是错的,你肯定说我在 ...
- sqli-labs lesson1-4
写在前面: 前四关基本都是基于GET的SQL注入 在Mysql中有一个系统数据库information_schema,存储着所有数据库的相关信息,一般利用这个数据库进行SQL注入. 因为大部分的注入需 ...
- Kerberos认证流程简述
摸鱼了很长一段时间,被大佬按在地上摩擦,一时间精神恍惚想不起来写点啥,正好回来碰巧给别人讲kerberos协议认证流程,结果讲来讲去把自己讲晕了,就非常尴尬 于是有了这篇文章(友情提示:无事莫装X,装 ...
- STM32—驱动GY85-IMU模块
GY85是一个惯性测量模块,内部集成了三轴加速度计.三轴陀螺仪.电子罗盘.气压传感器等芯片,用于测量和报告设备速度.方向.重力,模块可以将加速度计.陀螺仪.电子罗盘等传感器的数据进行综合,在上位机可以 ...
- SQL 练习21
查询每门课程被选修的学生数 SELECT cid,COUNT(cid) 选修人数 from sc GROUP BY cid