有时候实际业务中主键不一定叫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使用自定义主键的更多相关文章

  1. Hibernate自定义主键

    Hibernate自定义主键,通过此方法可以解决一此特殊的主键ID,在了解自定义主键时,先了解下Hibernate有自带的10种生成主键方法. 1) assigned主键由外部程序负责生成,无需Hib ...

  2. Spring boot JPA 用自定义主键策略 生成自定义主键ID

    最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...

  3. Sql 插入自定义主键

    在遇到数据库设计是自增的主键,且需要插入自定义的主键Id时,这个时候如果直接Insert的话,将会发生错误,错误提示信息: 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'XXX' ...

  4. oralce 获取自定义主键编码,有并发问题

    F_GET_SEQUENCE,功能函数,当多个服务同时调用此函数,可能产生并发问题,待解决,加主键. CREATE OR REPLACE Function f_Get_Sequence(As_Comp ...

  5. SpringJPA主键生成采用自定义ID,自定义ID采用年月日时间格式

    自定义主键生成策略 在entity类上添加注解 @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "custom ...

  6. Hibernate自定义简单主键生成

    Hibernate自定义主键生成 当使用Hibernate定义pojo的时候,有时候需要生成一定规则的数据表主键,这时候我们可以采用自定义主键生成方式去生成主键. 例如: 1.在pojo属性中定义数据 ...

  7. Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...

  8. hibernate 注解 主键生成策略

    一.JPA通用策略生成器       通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue ...

  9. 大家一起撸代码之——Hibernate各种主键生成策略与配置详解

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

随机推荐

  1. 苹果手机点击输入框input 页面放大 超出屏幕问题

     <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale ...

  2. “入职一年,那个被高薪挖来的Android开发被劝退了。”

    其实,在很多小伙伴的想法中,是希望通过跳槽实现薪酬涨幅,可是跳槽不是冲动后决定,应该谨慎啊~ 01 我的学弟,最近向我吐槽,2020 年上半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满 ...

  3. Salesforce Integration 概览(七) Data Virtualization数据可视化

    本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf Salesforc ...

  4. git连接远程GitHub仓库详细总结 for HTTPS协议

    简单唠叨几句哈.之前工作的时候,由于是在大厂,代码提交.版本管理都是多人协作的,所以公司当时用的git + gerrit来实现代码管理的.当时入职时并不懂git的使用,虽然有大神写好配置git的文档, ...

  5. Golang语言系列-16-context上下文

    context上下文 控制子goroutine退出 全局变量方式 package main import ( "fmt" "sync" "time&q ...

  6. MySQL记录之间是单向链表还是双向链表?

    前言 本文的观点是基于MySQL使用Innodb存储引擎的情况下进行的! 很多渠道说:MySQL数据按照主键大小依次排列,记录之间是双向链表连起来.如果说我告诉你这种说法很大程度上是错的,你肯定说我在 ...

  7. sqli-labs lesson1-4

    写在前面: 前四关基本都是基于GET的SQL注入 在Mysql中有一个系统数据库information_schema,存储着所有数据库的相关信息,一般利用这个数据库进行SQL注入. 因为大部分的注入需 ...

  8. Kerberos认证流程简述

    摸鱼了很长一段时间,被大佬按在地上摩擦,一时间精神恍惚想不起来写点啥,正好回来碰巧给别人讲kerberos协议认证流程,结果讲来讲去把自己讲晕了,就非常尴尬 于是有了这篇文章(友情提示:无事莫装X,装 ...

  9. STM32—驱动GY85-IMU模块

    GY85是一个惯性测量模块,内部集成了三轴加速度计.三轴陀螺仪.电子罗盘.气压传感器等芯片,用于测量和报告设备速度.方向.重力,模块可以将加速度计.陀螺仪.电子罗盘等传感器的数据进行综合,在上位机可以 ...

  10. SQL 练习21

    查询每门课程被选修的学生数 SELECT cid,COUNT(cid) 选修人数 from sc GROUP BY cid