本次學習用的數據庫,如下
即數據傳輸對象,服務端的客戶端的通信,自動定義個小的實體類,裡面只包含我們需要傳輸的屬性
2.不用DTO會有什麼問題
a.在用JavaScriptSerializer時,會報錯
原因:Teacher實體中有外鍵實體TeachClass,而TeachClass中又有一個Teacher的集合屬性,然後會一直循環的查詢,出現死循環
在序列化Teacher對象時,會去找外鍵實體TeachClass;而去找TeachClass對象時,又會重新找Teacher,一直到循環。
開始解決:
a.定義DTO類,解決死循環
我們可以定義個新的TeachClass類,它裡面不包含會引起死循環的屬性,即沒有ICollection<Teacher>屬性。此處我們也對Teacher重新聲明一個類。
b.定義部分類,方便添加額外方法
死循環問題就這麼解決了,這就是DTO,簡單吧。接下來,我們可能很多地方要用到序列化,那我們為了方便,直接在類的內部定義一個方法,自己序列化自己。但是問題又來了,因為實體類是EF生成的,每次我們點擊保存,EF就會按照tt模板和xml配置信息,重新初始化類,我們寫的方法就白寫了。這個時候,我們想到了部分類,在部分類中一個序列化該類的方法。
有個主意事項,因為EF在找類時是根據文件名來找,所以此處的類名 不能與 類文件名相同
c.開始使用自己定義的DTO類
發現下載程序正常運行,未報任何異常,搞定