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和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
随机推荐
- 背单词(AC自动机+线段树+dp+dfs序)
G. 背单词 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使 ...
- JAVA虚拟机的组成>从零开始学java系列
目录 JAVA虚拟机的组成 什么是虚拟机? JAVA虚拟机的组成部分 堆区(堆内存) 方法区 虚拟机栈 本地方法栈 程序计数器 字符串常量池 JAVA虚拟机的组成 什么是虚拟机? 虚拟机是运行在隔离环 ...
- MySQL学习07(规范化数据库设计)
规范化数据库设计 当数据库比较复杂时我们需要设计数据库 糟糕的数据库设计 : 数据冗余,存储空间浪费 数据更新和插入的异常 程序性能差 良好的数据库设计 : 节省数据的存储空间 能够保证数据的完整性 ...
- SpringMVC学习04(数据处理及跳转)
4.数据处理及跳转 4.1结果跳转方式 4.1.1 ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前缀} ...
- Shell-01-变量
变量 系统常用变量 #!/bin/bash echo "默认shell: $SHELL" echo "当前用户家目录: $HOME" echo "内部 ...
- spring boot中连接数据库报错500(mybatis)
spring boot中连接数据库报错500(mybatis) pom.xml中的依赖 <!-- 集成mybatis--> <dependency> <groupId&g ...
- mock平台介绍和moco的简单例子
1.mock是什么?mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.在具体的测试过程中,我们经常会碰到需要模拟数据或者接口的情况,因为环 ...
- kcptun安装
- 位(bit)、字节(Byte)、字(Word)、双字(Dword)之间的关系
位(bit): bit(简写:b),是计算机数据存储最小的单位,二进制中,0或者1就是一个位(比特位)bit. 字节: Byte(简写:B),是计算机信息技术用于计量存储容量的一种计量单位,通常情况下 ...
- FPGA学习过程(二)
项目:数码管动态显示时间 首先建立一个计时一秒的模块,作为数码管显示的需要 module timer_s( input wire clk, input wire rst_n, output wire ...