博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dto2Entity,WCF+ADO.EF数据传输对象和实体对象转换
阅读量:5912 次
发布时间:2019-06-19

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

DTO(
Data transfer object):

数据传输对象 专门用来传输的数据对象,只包含有可读写的属性,不包含任何方法;在WCF中使用时属性DataMember标记,对象自己用DataContract标记。比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用获取数据,没有必要把整个PO(persistant object持久对象,使用EF时就是EntityObject)对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO(ViewObject表现层对象)。

     如果在使用WCF时使用DTO,那么必然会遇到dto 和 entity转换的问题,每回手写转换好累啊。尝试着写个通用的方法来实现,以前看到过这个思路,但是当时忘记摘录下来备用,那么自己动手实现了。请看详情,有更好的办法和建议请留言。

///         /// Dto对象转Entity,只是复制属性,dto的属性要比entity少2个哦。        ///         /// 
EntityObject
/// dto对象 ///
EntityObject对应的实例
public EntityObject ConvertToEntityObject
(object dto) where T : EntityObject { Type dtoEntity = dto.GetType(); var piList = dtoEntity.GetProperties().Where(p => p.PropertyType.IsPublic == true).ToList(); Assembly assembly = Assembly.GetAssembly(typeof(T)); object resultObj = assembly.CreateInstance(string.Join(".",new string[]{
typeof(T).Namespace,typeof(T).Name})); var piResultObj = resultObj.GetType().GetProperties().Where(p => p.PropertyType.IsPublic == true).ToList(); foreach (System.Reflection.PropertyInfo pi in piList) { var sourcePi = piResultObj.Single(p => p.Name == pi.Name); if (sourcePi != null) { object value = pi.GetValue(dto, null); sourcePi.SetValue(resultObj, value, null); } } return resultObj as EntityObject; }

使用:

   

public bool AddUserEntity(MainAppDataAccess.DTO.SystemOperatorDto userDto)        {            try            {                using (AuthorityDbEntities db = new AuthorityDbEntities())                {                    db.SysOperator.AddObject(ConvertToEntityObject
(userDto) as SysOperator); db.SaveChanges(); } return true; } catch (Exception ex) { LogHelper.Error(ex); return false; } }

 

   

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

你可能感兴趣的文章
第一个版本
查看>>
SQL笔记(转)
查看>>
JSTL I18N 格式标签库 使用之二_____读取消息资源
查看>>
目标的价值
查看>>
数据库表间关系。
查看>>
VC中静态变量Static
查看>>
大数除法
查看>>
NYOJ-14 会场安排问题 -----贪心
查看>>
mbstring扩展导致中文乱码
查看>>
HTML5--本地存储Web Storage
查看>>
python os.path模块学习(转)
查看>>
UIViewController内存管理
查看>>
Android应用中Back键的监听及处理
查看>>
如何添加到 MFC 应用程序破坏 VBScript 的支持
查看>>
在eclipse中执行sql
查看>>
转载:如何迅速秒杀掉海量数据处理面试题
查看>>
如何理解oracle 11g scan ip
查看>>
现代程序设计 作业6 - 简单而有意义的题目
查看>>
Android下用Properties保存程序配置
查看>>
PHPSTORM/IntelliJ IDEA 常用 设置配置优化
查看>>