首页 / ASP.NET Core / 正文

[ASP.NET Core]ASP.NET Core中如何安装配置并使用Automapper实体映射工具?

4936 发布于: 2018-01-20 读完约需8分钟

问题描述

我们知道,AutoMapper是.NET开发框架中的一个很好用的实体类映射工具,它可实现实体之间的相互映射,只需要我们安装并配置好AutoMapper即可,在ASP.NET Core中同样可以使用AutoMapper来处理实体类间的映射,那么,在ASP.NET Core中如何安装、配置及使用AutoMapper呢?
本文分享一些常用的使用方式即处理技巧。

方案一

  • 通过 Nuget 包管理工具在项目中安装 AutoMapper 工具包;
  • 通过 Nuget 包管理工具在项目中安装 AutoMapper 的依赖注入包;
  • Startup.cs 文件中调用 AutoMapperAddAutoMapper() 的静态扩展方法,如下:
public void ConfigureServices(IServiceCollection services) {
    services.AddMvc(); // 添加 MVC 服务.
    services.AddAutoMapper(); // <-- 调用AutoMapper的AddAutoMapper() 静态扩展方法.
    //services.AddAutoMapper(typeof(Startup));  // <-- 新版本的AutoMapper请使用这种方式添加服务
  • 创建一个映射类文件,继承至 Profile 基类,如:
public class MappingProfile : Profile {
    public MappingProfile() {
        //此文件中添加所有的实体到实体间的映射
        CreateMap<User, UserDto>();
        CreateMap<UserDto, User>();
    }
}
  • 在ASP.NET Core MVC程序的控制器中使用,如:
public class UserController : Controller {

    // 创建一个私有的映射类对象
    private readonly IMapper _mapper;

    //使用构造器注入AutoMapper的实体对象
    public UserController(IMapper mapper) {
        _mapper = mapper;
    }

    public async Task<IActionResult> Edit(string id) {

        // 根据自己的需求查询数据
        var user = await _context.Users
            .SingleOrDefaultAsync(u => u.Id == id);

        //使用AutoMapper实现实体之间的映射转换,此处为: User =>> UserDto
        var model = _mapper.Map<User, UserDto>(user);

        // 其他的代码处理
    }
}

方案二

AutoMapper 6.1.1 以及 ASP.NET Core 1.1.2 中,完成使用反射来处理实体间的映射注册工作:

 public class UserProfile : Profile, IProfile
    {
        public UserProfile()
        {
            CreateMap<User, UserModel>();
            CreateMap<UserModel, User>();
        }
    }

//使用反射来注册映射关系

 public class Mappings
    {
     public static void RegisterMappings()
     {            
       var all =
       Assembly
          .GetEntryAssembly()
          .GetReferencedAssemblies()
          .Select(Assembly.Load)
          .SelectMany(x => x.DefinedTypes)
          .Where(type => typeof(IProfile).GetTypeInfo().IsAssignableFrom(type.AsType()));

            foreach (var ti in all)
            {
                var t = ti.AsType();
                if (t.Equals(typeof(IProfile)))
                {
                    Mapper.Initialize(cfg =>
                    {
                        cfg.AddProfiles(t); // 初始化每个实体映射
                    });
                }
            }
        }

    }

调用方法,在 ASP.NET Core MVC 项目中的 Startup.cs 文件中,使用如下的调用来注册:

Mappings.RegisterMappings();

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)

下一篇: [Dapper].NET/C#中使用Dapper时如何获取存储过程返回的多个结果集?

本文永久链接码友网 » [ASP.NET Core]ASP.NET Core中如何安装配置并使用Automapper实体映射工具?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册