1 AutoMapperExtensions(以泛型形式,扩展)

using AutoMapper;

namespace Web.Extensions

{

/// <summary>

/// 【自动映射扩展--类】

/// <remarks>

/// 摘要:

///    该类通过“AutoMapper”中间件,以泛型形式,把1个指定类型的1/n个指定实例中的数据直接赋值到另1个指定类型的1个指定实例中;或另1个指定类型的枚举数实例中。

/// </remarks>

/// </summary>

public static class AutoMapperExtensions

{

/// <typeparam name="TSource">泛型类型实例(1个指定类型实例,该类型实例为赋值操作,提供数据支撑)。</typeparam>

/// <typeparam name="TDestination">泛型类型实例(另1个指定类型实例,该类型实例为被赋值操作,提供实例支撑)。</typeparam>

/// <param name="source">1个指定类的1个指定实例,该实例为赋值操作提供数据支撑。</param>

/// <summary>

/// 【映射到】

/// <remarks>

/// 摘要:

///     通过相应的参数实例及其“AutoMapper”中间件,把1个指定类的1个指定实例中的数据,直接赋值到另1个指定类的1个指定实例中。

/// </remarks>

/// <returns>

/// 返回:

///    被赋值后的另1个指定类型的1个指定实例。

/// </returns>

/// </summary>

public static TDestination MapTo<TSource, TDestination>(this TSource source) where TSource : class where TDestination : class

{

//如果1个指定类型实例中没有数据,向赋值操作提供,则直接退出当前方法。

if (source == null)

return default(TDestination);

//为1个指定类的实例与另1个指定类的实例,执行赋值操作时,获取两者之间的赋值操作映射规则。

MapperConfiguration _config = new MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());

//通过指定赋值操作映射规则实例,获取与之相应的映射器实例,通过该映射器实例1个指定类的1个指定实例,赋值到,另1个指定类的1个指定实例中,并最终返回另1个指定类的1个指定实例。

IMapper _mapper = _config.CreateMapper();

return _mapper.Map<TDestination>(source);

}

/// <typeparam name="TSource">泛型类型实例(1个指定类型实例,该类型实例为赋值操作,提供数据支撑)。</typeparam>

/// <typeparam name="TDestination">泛型类型实例(另1个指定类型实例,该类型实例为被赋值操作,提供实例支撑)。</typeparam>

/// <param name="source">枚举数实例,该实例中存储着1个指定类的1/n个指定实例,该枚举数实例为赋值操作提供数据支撑。</param>

/// <summary>

/// 【映射到列表】

/// <remarks>

/// 摘要:

///     通过相应的参数实例及其“AutoMapper”中间件,把1个指定类的1/n个指定实例中的所有数据,直接赋值到另1个指定类型的1/n个指定实例,最后把另1个指定类的1/n个指定实例,存储到另1个指定类型的枚举数实例中。

/// </remarks>

/// <returns>

/// 返回:

///    枚举数实例,该枚举数实例中存储着另1个指定类的1/n个指定实例。

/// </returns>

/// </summary>

public static IEnumerable<TDestination> MapToList<TSource, TDestination>(this IEnumerable<TSource> source) where TSource : class where TDestination : class

{

//如果1个指定类型实例中没有数据,向赋值操作提供,则直接退出当前方法,并返回1个新的枚举数实例,该枚举数实例中没有存储任何数据。

if (source == null)

return new List<TDestination>();

//为1个指定类的实例与另1个指定类的实例,执行赋值操作时,获取两者之间的赋值操作映射规则。

var config = new MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());

//通过指定赋值操作映射规则实例,获取与之相应的映射器实例,通过该映射器实例把枚举数实例所存储的1个指定类的所有实例,依次赋值到,另1个指定类的1/n个指定实例中,存储到另1个指定类型的枚举数实例中,并最终返回另1个指定类的枚举数实例。

var mapper = config.CreateMapper();

return mapper.Map<List<TDestination>>(source);

}

}

}

2 AutoMapperExtensionsExam(以指定类型(Exam),扩展)

using AutoMapper;

using Data.Domain.Students;

using Web.Models;

namespace Web.Extensions

{

/// <summary>

/// 【考试自动映射扩展--类】

/// <remarks>

/// 摘要:

///    该类通过“AutoMapper”中间件,以指定类型(Exam)形式,把1个指定类型的1/n个指定实例中的数据直接赋值到另1个指定类型的1个指定实例中;或另1个指定类型的枚举数实例中。

/// </remarks>

/// </summary>

public static class AutoMapperExtensionsExam

{

/// <param name="examModel">考试模型记录的1个指定实例。</param>

/// <summary>

/// 【考试自动映射】

/// <remarks>

/// 摘要:

///    通过相应的参数实例及其“AutoMapper”中间件,把考试模型记录的1个指定实例中的数据,通过相应的赋值操作映射规则,直接赋值到考试类的1个指定实例中。

/// </remarks>

/// <returns>

/// 返回:

///    被赋值后的考试类的1个指定实例。

/// </returns>

/// </summary>

public static Exam ExamAutoMapper(this ExamModel examModel)

{

//如果考试模型记录实例中没有数据,向赋值操作提供,则直接退出当前方法。

if (examModel == null)

return default(Exam);

//为考试模型记录实例实例与考试类的实例,执行赋值操作时,定义两者之间的赋值操作映射规则。

//因为考试模型记录中的属性成员名称与考试类中的属性成员名称一致,所有不必为其定义特定的“.ForMember()”赋值操作映射规则。

MapperConfiguration _config = new MapperConfiguration(cfg => cfg.CreateMap<ExamModel, Exam>());

//通过指定赋值操作映射规则实例,获取与之相应的映射器实例,通过该映射器实例,把考试模型记录的1个指定实例中的数据,直接赋值到考试类的1个指定实例中,并最终返回考试类的1个指定实例。

IMapper _mapper = _config.CreateMapper();

return _mapper.Map<Exam>(examModel);

}

/// <param name="examModel">考试模型记录的1个指定实例。</param>

/// <summary>

/// 【考试映射到】

/// <remarks>

/// 摘要:

///    通过自定义扩展方法,把考试模型记录的1个指定实例中的数据,通过相应的赋值操作映射规则,直接赋值到考试类的1个指定实例中。

/// </remarks>

/// <returns>

/// 返回:

///    被赋值后的考试类的1个指定实例。

/// </returns>

/// </summary>

public static Exam ExamMapTo(this ExamModel examModel)

{

//如果考试模型记录实例中没有数据,向赋值操作提供,则直接退出当前方法。

if (examModel == null)

return default(Exam);

//通过自定义扩展方法,把考试模型记录的1个指定实例中的数据,通过相应的赋值操作映射规则,直接赋值到考试类的1个指定实例中。

return examModel.MapTo<ExamModel, Exam>();

}

}

}

3 重构Web.Controllers.LogicRenderController.[HttpPost]CreatePopup方法

[HttpPost]

public async Task<IActionResult> CreatePopup(ExamModel model)

{

Exam _exam = new Exam();

//常规赋值操作。

//_exam.Score = model.Score;

//_exam.Comment= model.Comment;

//_exam.Name = model.Name;

//_exam.CourseId = model.CourseId;

//_exam.StudentId = model.StudentId;

//以指定类型形式映射后,执行赋值操作。

//_exam = model.ExamAutoMapper();

//以泛型类型形式映射后,执行赋值操作。

//_exam = model.MapTo<ExamModel, Exam>();

//以指定类型形式调用泛型类型形式映射后,执行赋值操作。

_exam = model.ExamMapTo();

await _context.SugarScope.Insertable(_exam).ExecuteReturnEntityAsync();

model.SpecialtySelectList = PrepareSpecialty(0, true);

model.GradeSelectList = PrepareGrade(0, true);

model.CourseSelectList = PrepareCourse(0, true);

model.CategorySelectList = new List<SelectListItem>();

model.StudentSelectList = new List<SelectListItem>();

ViewBag.RefreshPage = true;

return View(model);

}

对以上功能更为具体实现和注释见:22-10-18-09_SqlSugarAcquaintance(初识SqlSugarCore之AutoMapper)。

第9章 初识SqlSugarCore之AutoMapper相关推荐

  1. Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.

    第I部分Hadoop基础知识 第1章初识Hadoop. 比较喜欢这句极其形象的比喻. "在古时候,人们用牛来拉重物.当一头牛拉不动根圆木时,人们从来没有考虑过要想方设法培育出一种更强壮的牛. ...

  2. 第一章 初识Mathematica

    第一章  初识Mathematica   1.Mathematica是什么 Matematica是由美国Wolfram公司研究开发的一个著名的数学软件,它提供了非常强大的功能,能够完成符号运算.数学图 ...

  3. 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

    本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 初识网 ...

  4. 《开源硬件创客——15个酷应用玩转树莓派》——第1章 初识树莓派

    本节书摘来异步社区<开源硬件创客--15个酷应用玩转树莓派>一书中的第1章,作者:朱铁斌,更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章 初识树莓派 开源硬 ...

  5. 《起跑吧,Opa》 -- 中译本 第一章 初识Opa

    第一章 初识opa 本章,你将初识opa.你将学习如何安装Opa,编写opa程序以及熟悉Opa开发周期中的各个步骤. 安装opa 需要你预先从opa网站(http://opalang.org/)下载适 ...

  6. 第一章 初识EmguCV

    第一章 初识EmguCV 1.1 EmguCV的基本介绍 1.1.1 计算机视觉.OpenCV和EmguCV 计算机视觉是一门研究如何使机器"看"的科学,更进一步的说,就是是指用摄 ...

  7. 第一章 初识HTML

    第一章 初识HTML 学习HTML: 开发网页.微信小程序.跨端界面开发.web游戏 hyper text markup language 超文本标记语言 网页的源码,解释和执行 w3c:万维网联盟/ ...

  8. 第一章 初识OpenHarmony

    序言 本书以3W1H教学法对每个知识点进行多维度介绍,笔者认为这样写更符合人类对新知识的学习.本书以教学场景续写,一章为半天知识点. 本书读者对象 阅读本书您需要具备html.css.js基础知识,所 ...

  9. 第1章 初识计算机病毒 1.1 计算机病毒基础知识

    第1章   初识计算机病毒 这一章将从概念上简要介绍计算机病毒的基本知识以及计算机病毒的命名,通过对这些概念的了解,从而使我们能更方便的阅读有关计算机病毒信息的文档和书籍. 1.1 计算机病毒基础知识 ...

最新文章

  1. java 为什么有匿名类_全面了解Java中的内部类和匿名类
  2. do{}while(0) 作用
  3. Qt创建Android服务
  4. 【题解】luogu P1941 飞扬的小鸟
  5. 【渝粤题库】广东开放大学 会展英语 形成性考核
  6. 2021数字化就业新职业新岗位研究报告
  7. SAS Planet软件使用教程及下载Googlemap地图
  8. apk倒入android studio,反编译apk导入android studio
  9. 仿外卖mysql源码_进云仿美团外卖源码 v1.19
  10. 华为vrrp默认优先级_【干货】华为vrrp配置
  11. python大神年薪_我程序员年薪 80 万被亲戚鄙视不如在二本教书的博士生?
  12. 矢量绘图界的性价比之王-Affinity Designer
  13. 湖北理工学院计算机学院优秀毕业生,关于表彰2012届优秀毕业生的决定
  14. 二分专项训练(二分搜索+二分答案的十贰道例题及解析
  15. 中间件技术及双十一实践·EagleEye篇
  16. Vue.js学习笔记(3)循环语句
  17. Vue.js 框架源码与进阶 - 搭建自己的SSR
  18. 如何提高亚马逊排名?亚马逊排名规则有哪些?
  19. 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序
  20. 手机客户端添加设备时需要扫描二维码,如何查找二维码

热门文章

  1. 微服务分布式开源的优点体现在哪?
  2. 使用迁移学习加强你的图像搜索
  3. 万事达启动“用你自己替代密码”计划
  4. WatchKit-Programming-Guide-Apple-Watch开发指南官方翻译及总结
  5. 直播App中酷炫礼物动画实现方案
  6. 水稻PHP基因,厦门大学Genome Res解析水稻基因调控机制
  7. 5G代时,华为手机超越苹果是大概率事情
  8. 仿站和模板建站的区别_广州网站建设应避免陷入模仿误区及仿站陷阱
  9. Java自制绘图软件
  10. Windows关闭程序托盘图标不能消失的原因