博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF架构~AutoMapper对象映射工具简化了实体赋值的过程
阅读量:6927 次
发布时间:2019-06-27

本文共 2911 字,大约阅读时间需要 9 分钟。

AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而是单独根据具体场景,写一个新的类,这个类一般以DTO结尾,意思是说,它是网络上的数据传输用的,而你的DTO数据对象的赋值过程就成了一个问题,而为了减少赋值过程的代码量,AutoMapper就出来了,它可以实现实体对实体的赋值过程,或者叫“映射过程”

我心中的项目应该是这样的,用户业务服务,产品业务服务,订单业务服务,这样服务都使 用单独的数据库,它们之间的通讯采用WCF进行实现,在获数据时会在WEB端添加缓存机制,以减少对WCF的调用,而在WCF的网络通讯中,数据类型一般 不会使用poco实体,因为它会有很多对当前业务无用的字段,我们会为具体业务建立具体的DTO对象,而entity实体与DTO实体之间的赋值过程我们 可以用AutoMapper来实现。

AutoMapper在程序中的体现:

DTO实体

[DataContract]    public class ProductDTO    {        [DataMember]        public int ProductID { get; set; }        [DataMember]        public string ProductName { get; set; }        [DataMember]        public System.DateTime CreateDate { get; set; }        [DataMember]        public int SaleCount { get; set; }        [DataMember]        public Nullable
ClickCount { get; set; } [DataMember] public string Info { get; set; } [DataMember] public int UserID { get; set; } [DataMember] public decimal SalePrice { get; set; } [DataMember] public int Discount { get; set; } }

POCO实体:

public partial class Product    {        public Product()        {            this.ProductDetail = new HashSet
(); } public int ProductID { get; set; } public string ProductName { get; set; } public System.DateTime CreateDate { get; set; } public int SaleCount { get; set; } public Nullable
ClickCount { get; set; } public string Info { get; set; } public int UserID { get; set; } public decimal SalePrice { get; set; } public int Discount { get; set; } public System.DateTime UpdateDate { get; set; } public virtual User_Info User_Info { get; set; } public virtual ICollection
ProductDetail { get; set; } }

下面使用AutoMapper实现对象两个实体的赋值,这是WCF服务中的代码片断:

public class ProductService : ServiceBase, IProductService    {        //通过ServiceLocator从IoC容器中获得对象        IProductRepository productRepository = ServiceLocator.Instance.GetService
(); #region IProductService 成员 public ProductDTO CreateProduct(ProductDTO productDTO) { Mapper.CreateMap
(); Product product = Mapper.Map
(productDTO); productRepository.AddProduct(product); return productDTO; } public List
GetProduct() { Mapper.CreateMap
(); List
arr = new List
(); productRepository.GetProduct().ForEach(i => { arr.Add(Mapper.Map
(i)); }); return arr; } public ProductDTO ModifyProduct(ProductDTO productDTO) { Mapper.CreateMap
(); Product product = Mapper.Map
(productDTO); productRepository.ModifyProduct(product); return productDTO; } #endregion }

怎么样,这种方式的对象赋值很爽吧,呵呵。

 

转载地址:http://vzkjl.baihongyu.com/

你可能感兴趣的文章
HDOJ 4884 & BestCoder#2 1002
查看>>
Validate Binary Search Tree leetcode java
查看>>
【编程题目】在二元树中找出和为某一值的所有路径(树)
查看>>
脱裤子放屁,多此一举
查看>>
445port入侵具体解释
查看>>
Git学习笔记(二)
查看>>
美妙的 CSS3 动画!一组梦幻般的按钮效果
查看>>
微软历史最高市值是多少?
查看>>
Linux Shell脚本Ldd命令原理及使用方法
查看>>
[ucgui] 对话框8——Framewin小工具
查看>>
Ununtu 12.04 gedit安装插件Source Code Browser
查看>>
Docker学习总结之Docker与Vagrant之间的特点比较
查看>>
人类智商一般在多少左右?爱因斯坦的智商是多少?
查看>>
Sql语句-case when then else end
查看>>
main函数中argc理解
查看>>
ArrayList与List对象用法与区别
查看>>
C++ 排序函数 sort(),qsort()的使用方法
查看>>
Python 隔离沙箱 virtualenv
查看>>
C中结构体的存储分配
查看>>
windows forms 上一个类似于wpf snoop 的工具: Hawkeye
查看>>