文档章节

在DoNetCore MVC 中如何使用AutoMapper

o
 osc_y8yehimr
发布于 2019/03/20 14:25
字数 512
阅读 4
收藏 0

精选30+云产品,助力企业轻松上云!>>>

刚开始,按照在donet mvc 的方法写了一遍,发现行不通啊,于是百度了一下,找到这么一篇 https://stackoverflow.com/questions/41284349/automapper-error-saying-mapper-not-initialized

动手开干  ,具体流程

1、Nuget 引入包

Install-Package  AutoMapper.Extensions.Microsoft.DependencyInjection

2、创建我们的源数据实体,创建我们的目标实体

   这是我的项目目录信息,其中红框中就是我们的源实体和目标实体

 

3、注入服务

在Startup.cs 类中 ConfigureServices 方法中最后一行  添加如下代码:

 services.AddAutoMapper();

 1  // This method gets called by the runtime. Use this method to add services to the container.
 2         public void ConfigureServices(IServiceCollection services)
 3         {
 4             services.Configure<CookiePolicyOptions>(options =>
 5             {
 6                 // This lambda determines whether user consent for non-essential cookies is needed for a given request.
 7                 options.CheckConsentNeeded = context => true;
 8                 options.MinimumSameSitePolicy = SameSiteMode.None;
 9             });
10 
11             //services.AddTransient<IAdminBusinessLoginService, AdminBusinessLoginService>();
12           
13 
14             var redisconn = Configuration.GetSection("RedisConnectionStrings");
15             services.AddOptions();
16             services.Configure<RedisConnectionStrings>(redisconn);
17 
18             var opt = Configuration.GetSection("RedisConnectionStrings");
19 
20             //Models.AutoMapperHelper.AutoMapperConfig.RegisterAutoMapper();
21 
22             services.AddSingleton<ICache, ICCSReidsiHelper>();
23 
24             services.AddAssembly("DSErpService");
25             services.AddAssembly("IDSErpService");
26             //注入上下文对象
27             var sqlConnection = Configuration.GetConnectionString("SchoolConnection");
28             services.AddDbContext<Db>(op => op.UseSqlServer(sqlConnection));
29 
30             services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
31             //前台用户cookie服务
32             .AddCookie(UserAuthorizeAttribute.UserAuthenticationScheme, options =>
33              {
34                  options.LoginPath = "/Login/Index";
35                  options.LogoutPath = "/Login/LogOff";
36                  options.AccessDeniedPath = new PathString("/Error/Forbidden");//拒绝访问页面
37                  options.Cookie.Path = "/";
38              });
39 
40             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
41             services.AddAutoMapper();
42         }

 

如图:

4、创建我们的映射对象

这里直接上代码:

 1 public class CategoryProfiles : Profile
 2     {
 3         public CategoryProfiles()
 4         {
 5             CreateMap<BusinessCategory, CategoryDto>().ReverseMap()
 6                 .ForMember(a => a.Id, b => b.MapFrom(c => c.Id))
 7                 .ForMember(a => a.CategoryName, b => b.MapFrom(c => c.CategoryName))
 8                 .ForMember(a => a.StatusMark, b => b.MapFrom(c => c.StatusMark));
 9         }
10     }

5、实现

 1 [Route("category")]
 2     public class categoryController : Controller
 3     {
 4         /// <summary>
 5         /// 获取用户缓存信息
 6         /// </summary>
 7         private ICache cache;
 8         /// <summary>
 9         /// 分类服务管理
10         /// </summary>
11         private ICategoryService categoryService;
12         private readonly IMapper _mapper;
13         public categoryController(ICache _cache, ICategoryService _service, IMapper mapper)
14         {
15             this.cache = _cache;
16             this.categoryService = _service;
17             this._mapper = mapper;
18         }
19         
20 
21         [HttpGet("get-pagelist")]
22         public async Task<JsonResult> GetCategoryPageList(int pageindex, int pagesize)
23         {
24             return await Task.Run<JsonResult>(() =>
25             {
26                 var totalcount = 0;
27                 var reslist = this.categoryService.GetCategroryList(null, pageindex, pagesize, out totalcount);
28                 return Json(new
29                 {
30                     code = 0,
31                     msg = "",
32                     count = totalcount,
33                     data = this._mapper.Map<List<CategoryDto>>(reslist.data)
34                 });
35             });
36         }
37     }

说明:

this._mapper.Map<List<CategoryDto>>(reslist.data) 我这里是集合映射到集合 ,
this._mapper.Map<T>(T);
this._mapper.Map<List<T>>(listT);
 
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Fetch方法封装、业务实践

  说Fetch之前啊,我们不得不说一说Ajax了,以前使用最多的自然是jQuery封装的Ajax方法了,强大而且好用。   有人说了,jQuery的Ajax都已经封装得那么好了,你还整Fetch干什么,这不是多...

osc_8nnvoyb1
25分钟前
14
0
在 Visual Studio 市场中发布项目扩展

  比较不错的开源项目中,尤其是类似于AbpNext这种级别的项目,我们都想要快速的尝试,如何提供快速给开发者提供模板是我们的一大难题。不过在VisualStudio中并没有这么难。 一.本地发布插...

osc_1wo6kipk
26分钟前
7
0
5000+字硬核干货!Redis 分布式集群部署实战

原理: Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储。 集群使用公式(CRC16 key)& 16384计算键key数据那个槽。...

osc_2jegjdnw
28分钟前
12
0
Jmeter(十四) - 从入门到精通 - JMeter定时器 - 下篇(详解教程)

1.简介   用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容、填表、或者查找正确的链接等。为了模拟用户实际情况,在性能测试中我们需要考虑思考...

osc_yy65eb2q
29分钟前
0
0
Redis 6.0 访问控制列表ACL说明

背景 在Redis6.0之前的版本中,登陆Redis Server只需要输入密码(前提配置了密码 requirepass )即可,不需要输入用户名,而且密码也是明文配置到配置文件中,安全性不高。并且应用连接也使用...

osc_zwv9uj8l
30分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部