当前位置: 首页 > news >正文

建立网站需要多少钱经营y湖南岚鸿非常好沈阳网站建设费用

建立网站需要多少钱经营y湖南岚鸿非常好,沈阳网站建设费用,seo课程多少钱,怎么搭建论坛AutoMapper是用来解决对象之间映射转换的类库。对于我们开发人员来说#xff0c;写对象之间互相转换的代码是一件极其浪费生命的事情#xff0c;AutoMapper能够帮助我们节省不少时间。 一. AutoMapper解决了什么问题? 要问AutoMapper解决了什么问题#xff1f; 难道不是对象… AutoMapper是用来解决对象之间映射转换的类库。对于我们开发人员来说写对象之间互相转换的代码是一件极其浪费生命的事情AutoMapper能够帮助我们节省不少时间。 一. AutoMapper解决了什么问题? 要问AutoMapper解决了什么问题 难道不是对象映射转换的问题吗 当然是不过我们可以问深入一些为什么项目中会出现大量的对象映射转换(以下对于非MVC项目也适用) 在现代的软件开发中项目的层级更加的细分而不同层级之间对于对象的需求是有区别的这就需要在不同层级间传递数据的时候必须要转换数据。 举一些实际具体的例子:在持久层(数据访问层), 我们的User对象可能是一个包含User表中所有字段的数据的对象甚至包含了用户的Password信息。而在界面层我们只是需要显示用户的 name, email不需要Password这些额外的信息同时它还需要用户的考勤信息而这个信息来自于另外一张表。 这个例子中能够发现不同层之间我们对于数据对象的需求是不同的。 每个层都做了它们职责范围内的事情: 持久层关注数据所以只提供数据对象它无需知道外层如何使用这些数据对象也无法知道。 界面层关注数据的呈现它只关注它要显示的数据。 那么问题是谁来弥补它们之间的鸿沟DTO(Data Transfer Object)——数据传输对象。而AutoMapper就是解决其中涉及到的数据对象转换的工具。 在实际开发中如果你还可以直接在Business层或者界面层直接使用持久层的对象因为你认为这个关系不大整个项目都是你自己控制的虽然 dirty但是quick. 作为一个有些洁癖的程序员我还是建议使用DTO在不同层级之间传递数据。因为当你做更高层级开发的时候比如开发web serviceWCFWeb API这些为系统外部提供接口的开发时候你就回明白这些好的习惯和思维能够帮助你更加好的设计这些外部接口。 二. AutoMapper如何使用? 先来看一个简单的例子这个例子是定义Order对象到OrderDto对象之间的映射。(我们把Order称呼为源类OrderDto称呼为目标类) Mapper.CreateMapOrder, OrderDto();//创建映射关系Order – OrderDto OrderDto dto Mapper.MapOrderDto(order);//使用Map方法直接将order对象装换成OrderDto对象 智能匹配 AutoMapper能够自动识别和匹配大部分对象属性: 如果源类和目标类的属性名称相同直接匹配目标类型的CustomerName可以匹配源类型的Customer.Name目标类型的Total可以匹配源类型的GetTotal()方法自定义匹配规则 AutoMapper还支持自定义匹配规则 Mapper.CreateMapCalendarEvent, CalendarEventForm() //属性匹配匹配源类中WorkEvent.Date到EventDate.ForMember(dest dest.EventDate, opt opt.MapFrom(src src.WorkEvent.Date)).ForMember(dest dest.SomeValue, opt opt.Ignore())//忽略目标类中的属性.ForMember(dest dest.TotalAmount, opt opt.MapFrom(src src.TotalAmount ?? 0))//复杂的匹配.ForMember(dest dest.OrderDate, opt opt.UserValueDateTime(DateTime.Now));固定值匹配 测试当定义完规则后可以使用下面的代码来验证配置是否正确。不正确抛出异常AutoMapperConfigurationException. Mapper.AssertConfigurationIsValid(); 三. AutoMapper处理多对一映射 我们开篇提到的问题中说到界面显示User的name, email, 还有用户的考勤信息而这些信息来自于2张不同的表。这就涉及到了多对一映射的问题2个持久层对象需要映射到一个界面显示层的对象。 假设我们的持久层对象是这样的: public class User {public int Id { get; set; }public string Name { get; set; }public string Email { get; set; }public string Passworkd { get; set; }public DateTime Birthday { get; set; } }public class Evaluation {public int Id { get; set; }public int Score { get; set; } }在Asp.net MVC中我的界面显示层的ViewModel是这样的 public class UserViewModel {public int Id { get; set; }public string Name { get; set; }public string Email { get; set; }public int Score { get; set; } } 接下来为了达到多对一的映射的目的我们创建这个EntityMapper类 public static class EntityMapper {public static T MapT(params object[] sources) where T : class{if (!sources.Any()){return default(T);}var initialSource sources[0];var mappingResult MapT(initialSource);// Now map the remaining source objectsif (sources.Count() 1){Map(mappingResult, sources.Skip(1).ToArray());}return mappingResult;}private static void Map(object destination, params object[] sources){if (!sources.Any()){return;}var destinationType destination.GetType();foreach (var source in sources){var sourceType source.GetType();Mapper.Map(source, destination, sourceType, destinationType);}}private static T MapT(object source) where T : class{var destinationType typeof(T);var sourceType source.GetType();var mappingResult Mapper.Map(source, sourceType, destinationType);return mappingResult as T;}} 为了实现多个源对象映射一个目标对象我们使用了AutoMapper的方法从不同的源对象逐一匹配一个已经存在的目标对象。下面是实际使用在MVC中的代码: public ActionResult Index() {var userId 23,var user _userRepository.Get(userId);var score _scoreRepository.GetScore(userId);var userViewModel EntityMapper.MapUserViewModel(user, score);return this.View(userViewModel); } 四. 使用Profile在Asp.net MVC项目中配置AutoMapper Profile是AutoMapper中用来分离类型映射定义的这样可以让我们的定义AutoMapper类型匹配的代码可以更加分散合理和易于管理。 利用Profile, 我们可以更加优雅的在MVC项目中使用我们的AutoMapper. 下面是具体的方法: 1.  在不同层中定义Profile只定义本层中的类型映射 继承AutoMapping的Profile类重写ProfileName属性和Configure()方法。 public class ViewModelMappingProfile: Profile {public override string ProfileName{get{return GetType().Name;}}protected override void Configure(){Mapper.CreateMap......} } 2. 创建AutoMapperConfiguration, 提供静态方法Configure一次加载所有层中Profile定义 public class AutoMapperConfiguration {public static void Configure(){Mapper.Initialize(x x.AddProfileViewModelMappingProfile());Mapper.AssertConfigurationIsValid();} } 3. 在Global.cs文件中执行 最后在Global.cs文件中程序启动前调用该方法 AutoMapperConfiguration.Configuration() 转载于:https://www.cnblogs.com/hnsongbiao/p/8732627.html
http://www.yutouwan.com/news/183633/

相关文章:

  • 网站开发助手网站制作需要多少钱官网
  • 中英文双语网站怎么做网站建设怎么申请域名
  • 网站备案中商城服务性质是什么域名申请的流程
  • 赣州网站制作厦门seo
  • 发展速度迅猛 具有丰富的网站建设经验php做网站优点
  • 网站开发和设计实训国际欧美专线
  • thinkphp做网站好吗手机登录网站怎么建设
  • 网站会员推广邀请系统中文域名解析网站
  • 诸暨公司制作网站需要哪些群站优化之链轮模式
  • 怎么用ps做网站首页最新网游网络游戏
  • 网站开发建设明细报价表厦门网站建设方案
  • 做标书网站自己家开了一家装修公司怎么做装修网站
  • 做外贸上哪些网站找客户最先进的无锡网站建设
  • 做灯箱片的设计网站wordpress编辑器添加代码工具
  • 手机 网站开发aspxwordpress 模板调用
  • 想找一家公司设计网站电商网页设计期末作业模板
  • wordpress音乐下载百度seo一本通
  • 徐州网站建设制作公司敬请期待换个说法
  • 网站打不开了看装修案例的网站
  • 微站直播平台游戏系统网站开发说明书
  • 网络营销推广网站软件著作权和专利的区别
  • 网站建设拟采用的技术路线怎么卖wordpress主题
  • 建立公司网站时什么是重要的wordpress关闭自动保存插件
  • dnf网站上怎么做商人网站开发属于什么部门
  • 迅速网站企业网站开发用什么好
  • 公司支付的网站建设如何入账销售怎样找精准客户
  • 新站整站排名优化火速公司给手机做网站的公司有哪些
  • 建设网站个人简介范文建设监理工程师网站
  • 沧州商城网站开发设计浏览器搜索引擎大全
  • 建设网站的总结免费 wordpress