EF架构~AutoMapper对象映射工具简化了实体赋值的过程
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<int> 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<ProductDetail>();
}
public int ProductID { get; set; }
public string ProductName { get; set; }
public System.DateTime CreateDate { get; set; }
public int SaleCount { get; set; }
public Nullable<int> 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> ProductDetail { get; set; }
}
下面使用AutoMapper实现对象两个实体的赋值,这是WCF服务中的代码片断:
public class ProductService : ServiceBase, IProductService
{ //通过ServiceLocator从IoC容器中获得对象
IProductRepository productRepository = ServiceLocator.Instance.GetService<IProductRepository>(); #region IProductService 成员 public ProductDTO CreateProduct(ProductDTO productDTO)
{
Mapper.CreateMap<ProductDTO, Product>();
Product product = Mapper.Map<ProductDTO, Product>(productDTO);
productRepository.AddProduct(product);
return productDTO;
} public List<ProductDTO> GetProduct()
{
Mapper.CreateMap<Product, ProductDTO>();
List<ProductDTO> arr = new List<ProductDTO>();
productRepository.GetProduct().ForEach(i =>
{
arr.Add(Mapper.Map<Product, ProductDTO>(i));
});
return arr;
} public ProductDTO ModifyProduct(ProductDTO productDTO)
{
Mapper.CreateMap<ProductDTO, Product>();
Product product = Mapper.Map<ProductDTO, Product>(productDTO);
productRepository.ModifyProduct(product);
return productDTO;
} #endregion
}
怎么样,这种方式的对象赋值很爽吧,呵呵。
EF架构~AutoMapper对象映射工具简化了实体赋值的过程的更多相关文章
- .NET之AutoMapper对象映射工具运用
AutoMapper对象映射工具:主要是将某一个实体转成另一个实体. 1.引用NuGet包;搜索:AutoMapper 2.创建实体类 using System; using System.Colle ...
- .NET的对象映射工具AutoMapper使用笔记
AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...
- 对象映射工具AutoMapper介绍
AutoMapper是用来解决对象之间映射转换的类库.对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间. 一. AutoMapper ...
- .NetCore学习笔记:四、AutoMapper对象映射
什么是AutoMapper?AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码.这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来 ...
- 【转】AutoMapper对象映射
什么是AutoMapper?AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码.这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来 ...
- AutoMapper 自动映射工具
先引用对应的DLL. 11.转换匿名对象 结合LINQ映射新的实体类. using System;using System.Collections.Generic;using System.Linq; ...
- 多层架构+MVC+EF+AUTOFAC+AUTOMAPPER
最近使用ligerui搭建了一个简单的教务管理demo,将重要的地方记录,也希望能帮到有这方面需要园友. 一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完整版
更新 很多小伙伴在用 IIS 发布的时候,总是会有一些问题,文章下边 #autoid-6-0-0 我也简单的动图展示了,如何 publish 到 IIS 的过程,如果你能看懂,却发现自己的项目有问题的 ...
- .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper
好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...
随机推荐
- 收缩数据库 DBCC SHRINKFILE
/* from: http://www.cnblogs.com/blackcore/archive/2010/12/27/1917911.html */ 数据库中的每个文件都可以通过删除未使用的页的方 ...
- SharePoint 2013开发入门探索(二)- 列表操作
我们如何用代码对SharePoint列表做些例如增删改查的操作呢?如果您的程序可以部署到服务器上,就可以使用 服务器对象模型,因为服务器对象模型提供的功能最多,限制最少:否则可能要选择客户对象模型等其 ...
- ubuntu 终端设置(颜色与长路径)
Linux给人最大的享受就是可以根据个人喜好去定制令自己舒服的系统配置,像终端颜色的设置就是一个典型的例子. 图1 系统默认状态下的终端显示 在没有经过自定义配置的终端下工作久了,难免容易疲劳 ...
- javascript code snippet -- 保留小数点位数
js1.5以上可以利用toFixed(x) ,可指定数字截取小数点后 x位 for example : //round "original" to two decimals var ...
- spfa判断负环
会了spfa这么长时间竟然不会判断负环,今天刚回.. [例题]poj3259 题目大意:当农场主 John 在开垦他的农场时,他发现了许多奇怪的昆虫洞.这些昆虫洞是单向的,并且可以把你从入口送到出口, ...
- iOS 取绝对值函数
1.abs(a) 处理int类型a的取绝对值 2.fabsf(a) 处理float类型a的取绝对值 3.fabs(a) 处理double类型a的取绝对值
- Linux网关配置(centos6)
1.找寻本地机器网关的位置,点击红圈位置 打开后样式 2.双击点开打开网络和共享中心,找到查看活动网络---->点击右边的本地连接 3.点击详细信息 4.查看如下 5.对照配置,进入linux命 ...
- android开源系列之——xUtils 开源库
http://blog.csdn.net/lijunhuayc/article/details/40585607
- 【转】JavaScript下对去重算法的优化
本人较懒,直接将链接附上: JavaScript下去重算法优化:http://www.linuxde.net/2013/02/12062.html
- 学习django之python中os模块的函数
os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos ...