zoukankan      html  css  js  c++  java
  • MVC系列学习(九)-DTO的使用

    本次学习用的数据库,如下

    image

    1.什么是DTO:DataTransferObject

    即数据传输对象,服务端的客户端的通信,自动定义个小的实体类,里面只包含我们需要传输的属性

    2.不用DTO会有什么问题

    a.在用JavaScriptSerializer时,会报错

    原因:Teacher实体中有外键实体TeachClass,而TeachClass中又有一个Teacher的集合属性,然后会一直循环的查询,出现死循环

    image

    b.使用json返回数据时,会出错

    image

    image

    3.使用DTO解决问题

    现在问题:

    在序列化Teacher对象时,会去找外键实体TeachClass;而去找TeachClass对象时,又会重新找Teacher,一直到循环。

    image

    开始解决:

    a.定义DTO类,解决死循环

    我们可以定义个新的TeachClass类,它里面不包含会引起死循环的属性,即没有ICollection<Teacher>属性。此处我们也对Teacher重新声明一个类。

    image

    b.定义部分类,方便添加额外方法

    死循环问题就这么解决了,这就是DTO,简单吧。接下来,我们可能很多地方要用到序列化,那我们为了方便,直接在类的内部定义一个方法,自己序列化自己。但是问题又来了,因为实体类是EF生成的,每次我们点击保存,EF就会按照tt模板和xml配置信息,重新初始化类,我们写的方法就白写了。这个时候,我们想到了部分类,在部分类中一个序列化该类的方法。

    image

    有个主意事项,因为EF在找类时是根据文件名来找,所以此处的类名 不能与 类文件名相同

    image

    c.开始使用自己定义的DTO类

    发现下载程序正常运行,未报任何异常,搞定

    image

    更多精彩内容请看:http://www.cnblogs.com/2star
  • 相关阅读:
    hdu 1028 母函数 一个数有几种相加方式
    第m个全排列
    大数处理
    并查集
    KMP算法及KMP算法的应用(POJ2406)
    算法---分治法
    末学者笔记--NTP服务和DNS服务
    末学者笔记--NFS服务和DHCP服务讲解
    末学者笔记--SSHD服务及SCP用法
    末学者笔记——SAMBA服务、FTP服务讲解
  • 原文地址:https://www.cnblogs.com/kimisme/p/4458194.html
Copyright © 2011-2022 走看看