
AutoMapper.NET框架
文章平均质量分 74
.NET跨平台
比较认真。编程就是算法和数据结构,算法和数据结构是编程的灵魂。
展开
-
Automapper源码分析
是一个对象映射库,可以用来将一个对象的属性映射到另一个对象上。它通过使用一组规则来自动地映射对象的属性,从而减少了手动编写大量重复代码的工作。在映射属性时,它会先根据属性名查找对应的映射规则,然后根据规则执行属性值的映射操作。是一个功能强大、易于使用的对象映射库,通过使用一组灵活的映射规则,可以大大简化编写对象映射代码的工作。这个方法接受两个泛型参数,分别表示源类型和目标类型,然后可以通过调用各种方法来指定映射规则,例如。如果找到了映射规则,则会根据规则执行属性的映射操作。方法可以指定某个属性的映射规则,原创 2023-03-09 17:39:55 · 694 阅读 · 0 评论 -
经典面试题之——如何自由转换两个没有继承关系的字段及类型相同的实体模型,AutoMapper?
这确实是一道基础题,不管是在java里面还是在C#里面,都属于一道非常基础的题,但很多童鞋竟然说没遇到过这样的场景,或者说学习基础的时候没重视过,所以自然不会了,那行,今天博主在这里就针对这个问题,做出详细的解释并由这个问题,同时,也给大家做个扩展学习吧。在实际的项目当中,这是个非常非常需要的,我们经常需要在不同用途的实体之间相互转换进行数据传输,最典型的当然就是Entity和DTO之间的相互转换咯(不懂什么是DTO的自己去科普下,或者在这儿你看成是ViewModel也行,这无所谓)。当然,开这篇文章肯定转载 2022-04-19 14:39:34 · 496 阅读 · 1 评论 -
AutoMapper学习
http://automapper.org/这是一款DTO的映射工具,AutoMapper是基于对象到对象约定的映射工具,它可以把复杂的对象模型转为DTO,或者其他的–那些让设计更合理更适于序列化、通信、传递消息的简单对象或者干脆就只是在领域层与应用层之间搭建一个简单的ACL防护层(就像DTO一样,用于代码的显示转换)来增加各自层的相互独立性。简单来说就是:就是根据A的模型和B的模型中的定义,自动将A模型映射为一个全新的B模型。前言VO、DTO、DO、PO、DAOVO(View Object.转载 2022-04-19 14:17:16 · 411 阅读 · 0 评论 -
【5min+】 对象映射只有AutoMapper?试试Mapster
系列介绍【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。5min+不是超过5分钟的意思,"+"是知识的增加。so,它是让您花费5分钟以下的时间来提升您的知识储备量。正文一谈到如何在.Net中进行对象映射,可能大部分同学都会脱口而出:“使用AutoMapper!”。 是的,AutoMapper 是一个非常成熟的对象映射器。截至到写这篇文章,您能在Nug转载 2022-02-24 22:42:28 · 659 阅读 · 0 评论 -
疑难杂症——EF+Automapper引发的查询效率问题解析
正文前言:前面总结了一些WebApi里面常见问题的解决方案,本来打算来分享下oData+WebApi的使用方式的,奈何被工作所困,只能将此往后推了。今天先来看看EF和AutoMapper联合使用的一个问题。最近两周一直在解决一个问题:使用Automapper将EF的Model转换成DTO的Model,数据量只有几百条,但是导航属性比较多,执行 Mapper.Map<List<TM_STATION>, List<DTO_TM_STATION>>(lstEFModel)转载 2021-09-11 14:04:11 · 1160 阅读 · 0 评论 -
Automapper如何全局配置map条件过滤null值空值对所有映射起效
我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我们的实体类。在给用户编辑的时候,我们可能某些字段在数据库中为Null,这时候需要一些默认值 比如这里UserDto中的BirTime,然后我们有一些人的习惯是在构造函数里面进行赋值 public class User { public int Id { get; set; } public string Name { get; set; }转载 2021-09-10 01:19:44 · 1475 阅读 · 0 评论 -
AutoMapper的源码分析
最近有一个小项目需要提供接口给第三方使用,接口会得到一个大的XML的字符串大约有8个对象100多个字段,在映射到Entity只能通过反射来赋值避免重复的赋值,但是明显感觉到性能下降严重,因为以前接触过AutoMapper所以写了一篇博客记录其中的实现原理。在github 上可以下载AutoMapper 源码,直接打开sln 文件 就可以看到项目结构。项目结构非常清晰,一个AutoMapper的实现类,两个测试库一个单元测试一个集成测试还有一个性能测试。下面就是AutoMapper的测试代码。var转载 2021-09-08 23:59:02 · 331 阅读 · 0 评论 -
在ASP.NET CORE中使用AUTOMAPPER
普通的模型映射现在有两个类,实体类Student和返回展示的 View类StudentView两个实体类字段还基本可以,不是很多,假如字段非常非常多,还需要手动去赋值的话,简直太痛苦了。想了想这才是一个方法,一般的系统都会少则几十,多则上百个这样的方法,这还不算,大家肯定遇到过一个情况,如果有一天要在页面多显示一个字段,噗!不是吧,首先要存在数据库,然后在该实体类就应该多一个,然后再在每一个赋值的地方增加一个,而且也没有更好的办法不是,一不小心就少了一个,然后被产品测试说咱们不细心,心塞哟,别转载 2021-06-19 16:20:22 · 553 阅读 · 0 评论 -
automapper 面试问题
一.AutoMapper使用中的问题1. 指定值只会执行一次public class MomanBaseProfile : Profile { public MomanBaseProfile() { CreateMap<RequestBase, MomanEntity>() .ForMember(d => d.ID, op => op.Ignore()) .ForMember(转载 2021-04-14 16:36:12 · 341 阅读 · 0 评论 -
.NET CORE 中使用AutoMapper进行对象映射
AutoMapper 基于约定的对象-对象映射器。AutoMapper使用流畅的配置API定义对象-对象映射策略。AutoMapper使用基于约定的匹配算法将源值与目标值匹配。AutoMapper面向模型投影方案,以将复杂的对象模型展平为DTO和其他简单对象,其设计更适合于序列化,通信,消息传递,或仅用于域和应用程序层之间的反腐败层。官网:http://automapper.org/文档:https://automapper.readthedocs.io/en/latest/index.html转载 2021-04-13 21:13:32 · 752 阅读 · 1 评论 -
AutoMapper 基础知识学习
http://automapper.org/这是一款DTO的映射工具,AutoMapper是基于对象到对象约定的映射工具,它可以把复杂的对象模型转为DTO,或者其他的–那些让设计更合理更适于序列化、通信、传递消息的简单对象或者干脆就只是在领域层与应用层之间搭建一个简单的ACL防护层(就像DTO一样,用于代码的显示转换)来增加各自层的相互独立性。简单来说就是:就是根据A的模型和B的模型中的定义,自动将A模型映射为一个全新的B模型。前言VO、DTO、DO、PO、DAOVO(View Object.转载 2021-04-07 13:52:17 · 352 阅读 · 0 评论 -
如何在 .NetCore 中使用 AutoMapper 高级功能
AutoMapper 是一个基于约定的面向对象的映射器,它的功能常用于将一个 input 对象 转成一个不同类型的 output 对象,input 和 output 对象之间的属性可能相同也可能不相同,这一篇我们来一起研究一下 AutoMapper 的一些高级玩法。安装 AutoMapper要想在项目中使用 AutoMapper ,需要通过 nuget 引用 AutoMapper 和 AutoMapper.Extensions.Microsoft.DependencyInjection 包,可以通过 V转载 2021-03-31 14:43:06 · 803 阅读 · 0 评论 -
AutoMapper如何全局配置map条件过滤null值空值对所有映射起效
我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我们的实体类。在给用户编辑的时候,我们可能某些字段在数据库中为Null,这时候需要一些默认值 比如这里UserDto中的BirTime,然后我们有一些人的习惯是在构造函数里面进行赋值public class User{public int Id { get; set; }pu...转载 2019-04-16 22:43:15 · 4959 阅读 · 5 评论 -
AutoMapper 最佳实践
AutoMapper 是一个基于命名约定的对象-&amp;amp;gt;对象映射工具。 只要2个对象的属性具有相同名字(或者符合它规定的命名约定),AutoMapper就可以替我们自动在2个对象间进行属性值的映射。如果有不符合约定的属性,或者需要自定义映射行为,就需要我们事先告诉AutoMapper,所以在使用 Map(src,dest)进行映射之前,必须使用 CreateMap() 进行配置。Mapper...转载 2018-10-30 22:56:47 · 1158 阅读 · 1 评论 -
让AutoMapper在你的项目里飞一会儿
先说说DTODTO是个什么东东?DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已。为什么要用DTO?1、DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层2、DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的。因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域...转载 2018-07-25 13:22:42 · 841 阅读 · 0 评论 -
AutoMapper官方文档(十)【嵌套映射】
在映射引擎执行映射时,可以使用多种方法之一来解析目标成员值。 其中一种方法是使用另一种类型映射,其中在映射配置中还配置了源成员类型和目标成员类型。 这使我们不仅可以平坦化我们的源类型,还可以创建复杂的目标类型。 例如,我们的源类型可能包含另一个复杂类型:public class OuterSource{ public int Value { get; set; } public I翻译 2017-11-28 14:03:41 · 2785 阅读 · 0 评论 -
AutoMapper官方文档(九)【列表和数组】
AutoMapper只需要配置元素类型,而不是任何可能使用的数组或列表类型。 例如,我们可能有一个简单的源和目标类型:public class Source{ public int Value { get; set; }}public class Destination{ public int Value { get; set; }}所有基本的泛型集合类型都被支持:Mappe翻译 2017-11-28 13:56:27 · 1974 阅读 · 0 评论 -
AutoMapper官方文档(八)【内联映射】
AutoMapper即时创建类型映射(6.2.0中的新增功能)。 当您第一次调用Mapper.Map时,AutoMapper将创建类型映射配置并编译映射计划。 后续的映射调用将使用编译的映射。内联配置要配置内联映射,请使用映射选项:var source = new Source();var dest = Mapper.Map<Source, Dest>(source, opt => opt.Conf翻译 2017-11-28 13:43:44 · 1601 阅读 · 0 评论 -
AutoMapper使用示例(一)【结合ASP.NET MVC4 】
Model层的类:public class Member { public int MemberId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get原创 2016-07-20 22:05:48 · 6039 阅读 · 0 评论 -
AutoMapper官方文档(十一)【自定义类型转换器】
有时候,你需要完全控制一种类型到另一种类型的转换。这通常是当一个类型看起来不像另一个类型时,转换函数已经存在,并且您希望从“松散”类型转换为更强类型,比如源类型的字符串到目标类型Int32。例如,假设我们有一个来源类型:public class Source{ public string Value1 { get; set; } public string Value2 { get翻译 2017-11-28 15:26:37 · 2517 阅读 · 0 评论 -
AutoMapper官方文档(十二)【自定义值解析器】
尽管AutoMapper覆盖了不少目的地成员的映射场景,但有1%到5%的目标值需要一些帮助来解决。 很多时候,这个自定义的价值决议逻辑是领域逻辑,可以直接在我们的领域。 但是,如果这个逻辑仅仅涉及到映射操作,就会把我们的源类型弄乱,造成不必要的行为。 在这些情况下,AutoMapper允许为目标成员配置自定义值解析器。例如,我们可能想要在映射期间计算一个值:public class Source{翻译 2017-11-28 16:18:12 · 1965 阅读 · 0 评论 -
AutoMapper官方文档(十三)【值转换器,Null替换,Map行为前后】
值转换器值转换器对另一种类型应用额外的转换。 在分配值之前,AutoMapper将检查要设置的值是否有任何相关的值转换,并在设置之前应用它们。您可以创建几个不同级别的值转换器: Globally Profile Map MemberMapper.Initialize(cfg => { cfg.ValueTransformers.Add<string>(val +翻译 2017-11-28 16:39:48 · 2335 阅读 · 0 评论 -
AutoMapper官方文档(十四)【依赖注入】
AutoMapper支持使用静态服务定位构建自定义值解析器和自定义类型转换器的能力:Mapper.Initialize(cfg =>{ cfg.ConstructServicesUsing(ObjectFactory.GetInstance); cfg.CreateMap<Source, Destination>();});或动态服务定位,用于基于实例的容器(包括 子/嵌套 容器)翻译 2017-11-28 16:57:09 · 6316 阅读 · 0 评论 -
AutoMapper官方文档(十五)【映射继承】
映射继承有两个功能: 从基类或接口配置继承映射配置 运行时多态映射继承基类配置是opt-in,您可以显式指定要从包含基本类型的配置继承的映射,也可以在包含IncludeBase的派生类型配置中指定该映射::CreateMap<BaseEntity, BaseDto>() .Include<DerivedEntity, DerivedDto>() .ForMember(d翻译 2017-11-29 09:31:04 · 1765 阅读 · 0 评论 -
AutoMapper官方文档(十六)【可查询扩展】
当使用带有AutoMapper标准Mapper.Map函数的ORM(如NHibernate或Entity Framework)时,您可能会注意到,当AutoMapper尝试将结果映射到目标类型时,ORM将查询图中所有对象的所有字段。如果你的ORM暴露IQueryables,你可以使用AutoMapper的QueryableExtensions辅助方法来解决这个关键的问题。使用Entity Frame翻译 2017-11-29 09:32:12 · 1400 阅读 · 0 评论 -
AutoMapper官方文档(十七)【配置】
创建一个MapperConfiguration实例并通过构造函数初始化配置:var config = new MapperConfiguration(cfg => { cfg.CreateMap<Foo, Bar>(); cfg.AddProfile<FooProfile>();});MapperConfiguration实例可以静态存储在一个静态字段中,也可以存储在一个依赖注入容翻译 2017-11-29 09:33:05 · 2926 阅读 · 0 评论 -
AutoMapper官方文档(十八)【条件映射,开放泛型,了解你的映射】
AutoMapper允许你在属性映射之前添加条件到必须满足的属性。这可以用在像下面这样的情况下,我们试图从int映射到unsigned int。class Foo{ public int baz;}class Bar { public uint baz;}在下面的映射中,属性baz只会在源对象中大于或等于0时被映射。Mapper.Initialize(cfg => { cfg.Cre翻译 2017-11-29 10:11:56 · 3837 阅读 · 0 评论 -
AutoMapper官方文档(一)【入门】
什么是AutoMapper?AutoMapper是一个对象与对象的映射器。对象-对象映射通过将一种类型的输入对象转换为不同类型的输出对象来工作。让AutoMapper感兴趣的是,它提供了一些有趣的约定,从而弄清楚如何将类型A映射到类型B.只要类型B遵循AutoMapper建立的约定,映射两种类型几乎就是零配置。为什么使用AutoMapper?映射代码很无聊。测试映射代码更无聊。 AutoMapper翻译 2017-11-27 16:41:38 · 7637 阅读 · 0 评论 -
AutoMapper官方文档(二)【升级指南】
初始化您现在必须使用Mapper.Initialize或new MapperConfiguration()来初始化AutoMapper。如果您希望保持静态使用,请使用Mapper.Initialize。如果你有很多的Mapper.CreateMap调用,把它们移动到一个Profile,或者Mapper.Initialize,在启动时调用一次。例如在这里看到。Profiles不要覆盖Configure翻译 2017-11-27 22:19:19 · 4625 阅读 · 0 评论 -
AutoMapper官方文档(三)【约定】
有条件的对象映射器条件对象映射器根据源和目标类型之间的条件创建新的类型映射。var config = new MapperConfiguration(cfg => { cfg.AddConditionalObjectMapper().Where((s, d) => s.Name == d.Name + "Dto");});成员配置成员配置就像配置,但是你可以完全控制什么要用和不用。var翻译 2017-11-27 22:51:39 · 2121 阅读 · 0 评论 -
AutoMapper官方文档(四)【扁平化(分割)映射】
扁平化映射对象-对象映射的一个常见用法是采用复杂的对象模型并将其扁平化为更简单的模型。 你可以采取一个复杂的模型,如:public class Order{ private readonly IList<OrderLineItem> _orderLineItems = new List<OrderLineItem>(); public Customer Customer { get;翻译 2017-11-27 23:04:38 · 1367 阅读 · 0 评论 -
AutoMapper官方文档(五)【反向映射和复杂化】
从6.1.0开始,AutoMapper现在支持更丰富的反向映射支持。 鉴于我们的实体:public class Order { public decimal Total { get; set; } public Customer Customer { get; set; }}public class Customer { public string Name { get; set; }翻译 2017-11-28 10:22:14 · 5122 阅读 · 0 评论 -
AutoMapper官方文档(六)【投影】
投影投影将源换为目标,而不是将对象模型展平。 没有额外的配置,AutoMapper需要一个平坦的目标地来匹配源类型的命名结构。 如果要将源值映射到与源结构不完全匹配的目标,则必须指定自定义成员映射定义。 例如,我们可能想要转向这个源代码结构:public class CalendarEvent{ public DateTime Date { get; set; } public s翻译 2017-11-28 11:24:51 · 794 阅读 · 0 评论 -
AutoMapper官方文档(七)【配置验证】
配置验证手动卷映射代码尽管乏味,但具有可测试的优点。 AutoMapper背后的灵感之一是不仅消除了自定义映射代码,而且消除了手动测试的需要。 由于从源到目标的映射是基于约定的,因此您仍然需要测试您的配置。AutoMapper以AssertConfigurationIsValid方法的形式提供配置测试。假设我们对源和目标类型的配置略有不同:public class Source{ publ翻译 2017-11-28 11:42:02 · 1250 阅读 · 0 评论 -
AutoMapper使用示例(二)【常规的转换器和分页功能】
Model层模型如下: public class SrcEmployee { public string Name { get; set; } public string Age { get; set; } public string Status { get; set; } public DateTime Hire原创 2016-07-23 18:09:30 · 3407 阅读 · 0 评论