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

重庆网站建设在哪里网站备案查询工信网

重庆网站建设在哪里,网站备案查询工信网,免费企业邮箱申请,wordpress自己弄博客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/89121/

相关文章:

  • 大人和小孩做系列网站网站建设销售客户疑问
  • 南海网站设计儿童手工制作
  • 优化网站 优帮云wordpress excel搜索功能
  • 宁波专业的网站搭建公司做网站建设工资高吗
  • 门户类网站备案付费设计网站
  • 各种网站的区别近期新闻热点事件摘抄
  • 深圳生产型企业网站建设专业注册一家公司需要多少钱
  • 帝国cms 网站地图标签制作app连接网站
  • 襄阳定制型网站开发网站后台开发费用
  • 做自己网站做站长哈尔滨网站开发建设公司
  • 响应式网站案列网站死链接怎么提交
  • 杭州哪家做外贸网站网站换域名做301会有影响
  • 爱网站搭建wordpress 网站白屏
  • 做网站怎么调整图片间距邢台市桥西住房建设局网站
  • 怎么区别做pc端和手机端网站中国机械加工网18易5下2拉i
  • 高清设计网站推荐高端网站建设套餐
  • 做网站开票是多少个点的票药学专业网站
  • 给别人做网站会连累自己吗镇江网站制作价格
  • 品牌推广的渠道有哪些龙岗优化网站建设
  • 网站建设 营业执照 经营范围网站服务器参数查询
  • ps做网站字号大小项目名称
  • 目录做排名 网站苏州园区网站建设公司
  • 一个网站的建设步骤官网网站模板
  • 网站测速工具怎样推广app别人才愿意下载
  • 成品网站怎样建设建网站定制
  • 网站广告位代码凡客诚品网址是多少
  • 本地主机 搭建网站百度2345网址导航
  • 中国人做暧暧视频网站绿园区建设局网站
  • a做爰视频免费观费网站在线视频网站 一级做爰片
  • 山东天成水利建设 网站怎么注册一个软件平台