zoukankan      html  css  js  c++  java
  • 3、AutoMapper In Asp.net Core

    Entity && ViewModel

    • Entities -- 实体模型

      • Company.cs -- 公司实体类
      • Employee.cs -- 公司职员实体类
        • Gender -- 性别枚举类型
    • Models -- Dto(ViewModel)

      • CompanyDto

    实体类代码

    Company


        public class Company
        {
            public Guid Id { get; set; }
            public string Name { get; set; }
            public string Country { get; set; }
            public string Industry { get; set; }
            public string Product { get; set; }
            public string Introduction { get; set; }
    
            public DateTime? BankruptTime { get; set; }
    
            public ICollection<Employee> Employees { get; set; }
        }
    

    Employee + Gender

        public class Employee
        {
            public Guid Id { get; set; }
            public Guid CompanyId { get; set; }
    
            public string EmployeeNo { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public Gender Gender { get; set; }
            public DateTime DateOfBirth { get; set; }
    
            public Company Company { get; set; }
        }
    
        public enum Gender
        {
            男 = 1,
            女 = 2
        }
    

    Dto (ViewModel)

    CompanyDto

        public class CompanyDto
        {
            public Guid Id { get; set; }
            public string CompanyName { get; set; }
        }
    

    CompaniesController

    原始的获取方法

    public async Task<IActionResult> GetCompanies()
    {
        var companies = await .companyRepository.GetCompaniesAsync();
        var companyDtos = new List<CompanyDto>();
        foreach (var company in companies)
        {
            companyDtos.Add(new CompanyDto
            Id = company.Id,
            Name = company.Name
        });
     }
     return ok(companyDtos);
    }
    

    AutoMapper

    1. 添加nuget

    2. 注册服务

    扫描当前应用域下面的程序集

     services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
    

    3. 建立映射类

    新建CompanyProfile.cs Profile类

     public class CompanyProfile : Profile
        {
            public CompanyProfile()
            {
                CreateMap<Company, CompanyDto>()  // 映射
                    .ForMember(			// 按照默认规则无法映射成功的
                        dest => dest.CompanyName,  // 目标属性 CompanyDto.CompanyName
                        opt => opt.MapFrom(src => src.Name)); //指定目标从哪里来Company 
    			
                CreateMap<CompanyAddDto, Company>();
                CreateMap<Company, CompanyFullDto>();
                CreateMap<CompanyAddWithBankruptTimeDto, Company>();
            }
        }
    

    4. 在Controller中使用AutoMaper

    ### 4.1 注入
    
      private readonly IMapper _mapper;
    
    public CompaniesController(IMapper mapper)           
     {       
       _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
        // 检查mapper 是否为null
     }
    

    4.2 使用AutoMapper代替Foreach遍历

    public async Task<ActionResult<IEnumerable<CompanyDto>>> GetCompanies( )
    {
      var companies = await_ companyRepos itory .GetCompaniesAsync();
      var companyDtos = _mapper.Map<IEnumerable<CompanyDto>> (companies)
          			
      return 0k( companyDtos);
    }
    
    
  • 相关阅读:
    codeforces234C
    codeforces340D
    Codeforces Round #259 (Div. 2) 解题报告
    memset 赋值
    codeforces2B
    codeforces431C
    Node.js权威指南 (10)
    归档普通对象Demo示例程序源代码
    联系人数据存储Demo源代码
    1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数
  • 原文地址:https://www.cnblogs.com/qzdd/p/12892093.html
Copyright © 2011-2022 走看看