Github 开源:使用升讯威 Mapper( Sheng.Mapper)与 AutoMapper 互补,大幅提高开发效率!...

 

Github 地址https://github.com/iccb1013/Sheng.Mapper

 

在上一篇幅中,简单介绍了 升讯威 Mapper( Sheng.Mapper)【http://www.cnblogs.com/sheng_chao/p/7026732.html】,上文的介绍比较粗略,在这篇文章中,直接用几个例子来具体的讲一下它的使用场景,和为什么要使用它,以及和 AutoMapper 的互补使用。

 

AutoMapper 是一款十分强大的对象映射工具,我在项目中大量的使用了 AutoMapper 这一工具,如处理 DTO 与 实体对象间的映射关系,使用类似如下代码:

 

但是在使用 AutoMapper 的过程中,有一些小细节会比较麻烦,它不能创建相同对象类型间的映射赋值关系,也不能根据场景为相同的对象映射关系创建不同的映射逻辑,所以我们目前的使用集中的 Dto 与 实体对象间的映射。

我们现在的项目使用了 Entity Framework ,在更新数据时,一般的逻辑是前端传过来一个 DTO 对象,转换成实体对象,根据 Id 去 DBContext 中拿到数据库中的实体对象,再用传入的实体对象给数据库中的对象赋值,SaveChanges。

 

类似如下代码,用传入的 storehouseBase 给 dbStorehouseBase 赋值:

这里如果使用 AutoMapper   就涉及到两个问题:

1.AutoMapper  是不能为相同的对象类型创建映射规则的,如:

 

2.如果不使用规则,即使可以直接 Map,实体对象中又存在大量的导航属性,是不能直接覆盖过去的,这就比较麻烦了,我们的项目中开发人员只好手工的用传入的实体对象,一个属性一个属性为数据库中拿到的实体对象赋值,如果要更新的属性比较多,就非常麻烦,此外在修改时给实体对象新增加了属性,是否还能保证记得回到这里来给添加新的赋值代码。

 

所以在这种场景下, 可以使用 ShengMapper 来解决:

 

 

ShengMapper 的 SetValuesSkipVirtual 方法,见文知义,它自动映射两个对象,进行赋值操作,并自动的跳过 Virtual  属性,因为 Entity Framework 的导航属性都是 Virtual   的(DB First)。

 

此外,还有一些更新赋值场景,存在一些特定的业务逻辑,比如说我更新用户时,不更新 Password 字段,不更新最后登录时间字段,更新订单时,不更新创建时间字段等等,这种同一种对象类型的映射赋值,不但要跳过导航属性,还要跳过指定的字段,也可以使用 ShengMapper  很好的解决,使用类似如下代码:

 

它的方法原型是:

 

SetValuesWithoutProperties 方法 把 product 中的属性,更新到 dbProduct 中,同时跳过 Supplier 属性和所有的 Virtual 属性。

 

那么既然能跳过指定的属性,自然我们也能只更新指定的属性,如:

SetValuesWithProperties 方法把 productEntryBatch 中的属性值更新到 dbProductEntryBatch 中,但是只更新 Name 这个属性。

 

ShengMapper 还提供了一些其它方法重载:

 

使用 ShengMapper 是不需要事先创建规则的,所有对对象的映射赋值操作,都是以更灵活的方式来完成的,比如我这一次 User 对 User 要排除 Password ,另一个场景不需要排除,也是可以的,而 AutoMapper 的规则必须是全局唯一的,一旦创建了 UserDTO 对 User 的规则,在所有的时候,都会遵循事先定义的规则去执行。

所以在实际应用中,可以通过与 AutoMapper 互补的方式,解决这方面的问题。

 

欢迎交流探讨:QQ:279060597  @南京

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux服务器上遇到无法连接到GitHub.com的问题,可能是由于网络连接问题或防火墙设置导致的。以下是一些可能的解决方法: 1. 检查网络连接:确保服务器的网络连接正常,并且可以访问其他网站。可以尝试使用ping命令来测试与GitHub.com的连接是否正常。例如: ```shell ping github.com ``` 2. 检查防火墙设置:如果服务器上启用了防火墙,可能需要允许对GitHub.com的访问。可以使用iptables命令来查看和修改防火墙规则。例如,如果使用的是iptables防火墙,可以运行以下命令来允许对GitHub.com的访问: ```shell sudo iptables -A OUTPUT -p tcp -d github.com --dport 443 -j ACCEPT ``` 3. 检查代理设置:如果服务器使用了代理服务器进行网络连接,需要确保代理设置正确并且可以连接到GitHub.com。可以通过设置http_proxy和https_proxy环境变量来配置代理。例如: ```shell export http_proxy=http://proxy.example.com:8080 export https_proxy=http://proxy.example.com:8080 ``` 4. 检查DNS设置:如果服务器的DNS设置不正确,可能无法解析GitHub.com的域名。可以尝试使用nslookup命令来检查域名解析是否正常。例如: ```shell nslookup github.com ``` 5. 尝试使用其他协议:如果无法使用HTTPS协议连接到GitHub.com,可以尝试使用SSH协议进行克隆或推送。可以在GitHub上的仓库页面上找到SSH克隆URL。例如: ```shell git clone git@github.com:username/repo.git ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值