AutoMapper在C#中的有趣应用】的更多相关文章

最近发现了一个比较有趣的东西 AutoMapper,主要将Model转换为DTO,DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层. 先来看一点实例,两个类之间的映射. 首先定义两个类Source与DTOSource: 1 public class Source 2 { 3 public int Id { get; set; } 4 public string Content { get; set; } 5 } 6 7 public class DTOSourc…
最近发现了一个比较有趣的东西 AutoMapper,主要将Model转换为DTO,DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层. 先来看一点实例,两个类之间的映射. 首先定义两个类Source与DTOSource: public class Source { public int Id { get; set; } public string Content { get; set; } } public class DTOSource { public int…
一.先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层. 2.DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的.因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域Model之间的解耦,因此改动领域Model不会影响UI层. 3.DTO说白了就是数据而已,不包含任何的…
MVC中,如果想在Domain Model和View Model之间建立映射,用AutoMapper是一个不错的选择.不仅如此,AutoMapper能在不同对象之间建立映射,比如string与int类型, DateTime与int类型,接口与实现类,等等.本篇主要总结AutoMapper在MVC中的配置.使用.单元测试,以及各种映射场景. 注意: 如果通过NuGet下载最新版的AutoMapper,需要注意的是:有些方法,比如ForMember方法,和以前不一样.还有一些方法已经过期. 配置 □…
本文给除了python中几个有趣的用法,可以给我们不一样的启发 1: Python中模拟使用C++ 中的   cout << import sys  class ostream: def __init__(self,file): self.file = file def __lshift__(self,obj): self.file.write(str(obj)); return self cout = ostream(sys.stdout) cerr = ostream(sys.stderr…
目前项目中获取到DataSet数据后用下面这种方式复制数据. List<AgreementDoc> list = new List<AgreementDoc>(); ].Rows) { AgreementDoc docItem = new AgreementDoc() { ContactID = row["ContactID"].ToString(), AgreementAccepted = row["AgreementAccepted"].…
最近在debug dubbo代码过程中遇到的很有趣的问题 我们都知道dubbo ReferenceBean是消费者的spring bean包装,为了查一个consumer端的问题,在ReferenceBean的父类ReferenceConfig的 T get()方法(140行)打上了一个断点. 当我debug 跟进init方法之后发现,ReferenceConfig的成员变量initialized(boolean类型),没有初始化,值变成了true? 纳尼... 在学习java的基础知识的时候,…
本文参考了Taswar Bhatti的博客,他写了<Instant AutoMapper>这本书.遗憾的是,这本电子版书在国内还买不到,也下载不到.也只能从他的有限几篇博文中来窥探一二了. 本文模拟了一个关于订单的应用场景,涉及到的方面包括: ※ 显示所有订单 ※ 显示客户信息 ※ 显示订单,但不显示view model OrderDto中的集合导航属性 ※ 把源中的DateTime类型转换成int类型 ※ 把源中的bool类型转换成string类型 ※ 把源中的集合导航属性IEnumerab…
本篇AutoMapper使用场景: ※ 动态实现接口方法或属性 ※ 目标中的属性如果比源多,可以忽略多出的属性 ※ 目标有virtual属性,可忽略 ※ 目标属性值为null的解决办法 ※ int转string ※ bool转string ※ DateTime转String ※ 判断条件 动态实现接口方法或属性 public interface ICreateOrderMessage { string CustomerName { get; set; } } □ 使用 public Action…
本篇AutoMapper使用场景: ※ 类型转换,源string类型分别转换成int, DateTime,Type ※ 源和目标都包含复杂类型属性 ※ 把源中的一个属性映射到目标中的多个属性 类型转换,源string类型分别转换成int, DateTime,Type □ Domain model public class Source2 { public string Value1 { get; set; } public string Value2 { get; set; } public s…
本篇AutoMapper使用场景: ※ 源字典集合转换成目标字典集合 ※ 枚举映射 ※ 自定义解析器 ※ 源中的复杂属性和Get...方法转换成目标属性 源字典集合转换成目标字典集合 □ Domain model public class SourceValue { public int Value { get; set; } } □ View model public class DestValue { public int Value { get; set; } } □ 映射配置 Mappe…
本篇AutoMapper使用场景: ※ Decimal转换成String类型 ※ 源数组转换成目标数组 ※ 源中的集合(数组)属性转换成目标中的集合(数组)属性 ※ 子类父类间的映射 Decimal转换成String类型 □ Domain model public class Order { public decimal Amount { get; set; } } □ View  model public class OrderListViewModel { public string Amo…
1. 过滤对象(找到数组中(collection)与之(source)匹配对象,过滤掉数组中(collection)不匹配对象) function where(collection, source) { var arr = []; var keys = Object.keys(source); arr = collection.filter(function(item){ for (var i = 0; i < keys.length; i++) { if ( !item.hasOwnPrope…
配置.单元测试.AOP注入 Decimal转换成String类型 源数组转换成目标数组 源中的集合(数组)属性转换成目标中的集合(数组)属性 子类父类间的映射 源字典集合转换成目标字典集合 枚举映射 自定义解析器 源中的复杂属性和Get...方法转换成目标属性 类型转换,源string类型分别转换成int, DateTime,Type 源和目标都包含复杂类型属性 把源中的一个属性映射到目标中的多个属性 动态实现接口方法或属性 目标中的属性如果比源多,可以忽略多出的属性 目标有virtual属性,…
本篇AutoMapper使用场景: ※ 当源和目标具有同名的复杂类型属性.集合类型属性,这2种属性对应的类间也需建立映射 ※ 一次性定义好源和目标的所有映射 ※ 一次性定义好源和目标的所有映射,目标中有复杂类型属性 ※ 一次性定义好源和目标的所有映射,目标中有复杂类型属性,为复杂类型创建自定义解析器 □ Domain model public class BookStore { public string Name { get; set; } public Address Address { g…
CSS Rese http://yui.yahooapis.com/3.18.1/build/cssreset/cssreset-min.css <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.18.1/build/cssreset/cssreset-min.css"> 垂直居中 要想一行文字在盒子中垂直居中只需要设置这行行高等于盒子高度l…
public class Test { public void age(int age) { System.out.println("int age="+age); } public void age(Integer age) { System.out.println("Integer age="+age); } public static void main(String[] args) throws Exception { Test obj = new Test…
以下代码测试环境:vs2019 执行这么一段代码,看看会发生什么. int main() { ] = { }; arr[] = ; } 毫无疑问,会报错,因为访问越界了. 再看看另一段代码 ] = { }; int main() { arr[] = ; } 与上面的代码相比几乎没什么差别,仅仅把arr的定义和初始化搬到了函数外面,但执行程序却没有出错. 类似的还有这么一段代码: int main() { ] = { }; arr[] = ; } 同样也能执行成功,那么这是为什么呢? 探究: 我们…
一.问题回顾 面试的时候被问到的问题,原问题是: 1:写一下socket网络编程服务端和客户端常用的函数. 2:如果服务端在listen之后没有accept,那客户端的connect会返回吗?为什么? 3:此时调用send发数据会怎么样? 在看下面答案之前,推荐阅读: 深入探索 Linux listen() 函数 backlog 的含义 Socket accept queue is full 但是一个连接需要从SYN->ACCEPT 下面是我对这个问题实验整理的结果: 情况 ESTABLISHE…
最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMapper只要用来数据转换,在园里已经有很多这方面文章了,本文主要介绍其在实际项目常用总结,以及在ABP项目中的应用介绍.AutoMapper应用非常简单,大家稍微看下文档就可以上手,但是性能不好啊,所以一般用在后台项目,对外的项目千万不要用.就那NOP来说吧,它也是把AutoMapper放在后台项目使用,商城前台的项目是不敢用的. 有关性能…
AutoMapper之ABP项目中的使用 最近在研究ABP项目,昨天写了Castle Windsor常用介绍以及其在ABP项目的应用介绍 欢迎各位拍砖,有关ABP的介绍请看阳光铭睿 博客 AutoMapper只要用来数据转换,在园里已经有很多这方面文章了,本文主要介绍其在实际项目常用总结,以及在ABP项目中的应用介绍.AutoMapper应用非常简单,大家稍微看下文档就可以上手,但是性能不好啊,所以一般用在后台项目,对外的项目千万不要用.就那NOP来说吧,它也是把AutoMapper放在后台项目…
网上使用AutoMapper的文章很多,就不多说了.这里主要记录一下怎么在项目中配置和使用. 首先是从NuGet获取AutoMapper. 在Startup.cs文件中注册AutoMapper服务 public void ConfigureServices(IServiceCollection services) { services.AddAutoMapper(); } 一般把AutoMapper的映射关系单独写在一个Profile文件,比如个人习惯在Service层添加一个ServicePr…
原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情况戳这里ECMAScript 5 compatibility table),权威指南上提到在ES3中利用apply模拟该方法的实现(JS权威指南中函数那章), 但无法真实还原该方法, 这也是真bind方法中的有趣特性. (原文这边理解有问题, 这段话的意思如果结合犀牛书上下文的意思, 再结合犀牛书中…
回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而是单独根据具体场景,写一个新的类,这个类一般以DTO结尾,意思是说,它是网络上的数据传输用的,而你的DTO数据对象的赋值过程就成了一个问题,而为了减少赋值过程的代码量,AutoMapper就出来了,它可以实现实体对实体的赋值过程,或者叫“映射过程”. 我心中的项目应该是这样的,用户业务服务,产品业务…
07:有趣的跳跃 总时间限制:  1000ms 内存限制:  65536kB 描述 一个长度为n(n>0)的序列中存在“有趣的跳跃”当前仅当相邻元素的差的绝对值经过排序后正好是从1到(n-1).例如,1 4 2 3存在“有趣的跳跃”,因为差的绝对值分别为3,2,1.当然,任何只包含单个元素的序列一定存在“有趣的跳跃”.你需要写一个程序判定给定序列是否存在“有趣的跳跃”. 输入 一行,第一个数是n(0 < n < 3000),为序列长度,接下来有n个整数,依次为序列中各元素,各元素的绝对值…
CSS 在IE6, IE7 和IE8中的差别 关于浏览器的最离奇的统计结果之一就是Internet Explorer 版本6,7和8共存.截至本文,Internet Explorer各个版本总共占据了大约65%的市场份额.在网站开发社区,这个数字要小很多,统计显示大概只有40%.   这些统计中比较有趣的部分是,IE6.IE7.IE8之间的数值很接近,这防止了单个Microsoft的浏览器占居统治地位——与过去的情况相反.根据这些令人遗憾的统计结果,在为客户开发网站的时候开发人员对所有当前使用的…
译文出处:http://www.codeproject.com/Tips/871938/LINQ-To-SQL-Using-Csharp 今天在这个话题中,我给大家分享一个在c#编程中非常有趣和十分有用的特性. 开始之前,我想告诉大家关于Linq的基本信息.比如:什么是linq?然后再来分享实际应用. 说明: LINQ = Language Integrated Query(集成查询语言) Linq是微软在.NET Framework 3.5中信增加的一个特性.它是用来查询数据库和对数据库查询的…
Hash是把锋利的刀子,处理海量数据时经常用到,大家可能经常用hash,但hash的有些特点你是否想过.理解过.我们可以利用我们掌握的概率和期望的知识,来分析Hash中一些有趣的问题,比如: 平均每个桶上的项的个数 平均查找次数 平均冲突次数 平均空桶个数 使每个桶都至少有一个项的项个数的期望 本文hash的采用链地址法发处理冲突,即对hash值相同的不同对象添加到hash桶的链表上. 每个桶上的项的期望个数 将n个不同的项hash到大小为k的hash表中,平均每个桶会有多少个项?首先,对于任意…
简介: 作为一个系统管理程序(hypervisor),Linux® 有几个创新,2.6.32 内核中一个有趣的变化是 KSM(Kernel Samepage Merging)  允许这个系统管理程序通过合并内存页面来增加并发虚拟机的数量.本文探索 KSM 背后的理念(比如存储去耦合).KSM 的实现.以及如何管理 KSM. 服务器虚拟化 虚拟化技术从上世纪 60 年代开始出现,经由 IBM® System/360® 大型机得以流行.50 年过后,虚拟化技术取得了跨越式发展,使得多个操作系统和应用…
如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsearch 项目背后的动机.Elasticsearch(构建于 Lucene 之上)在一个容易管理的包中提供了高性能的全文搜索功能,支持开箱即用地集群化扩展.您可以通过标准的 REST API 或从特定于编程语言的客户端库与 Elasticsearch 进行交互. 本教程将展示 Elasticsearch…