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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM