在實體框架中,這兩個術語都用於DTO和代理對象。我很困惑,如果DTO被用來傳輸狀態,那麼爲什麼使用這個代理對象呢?C#中的DTO(數據傳輸對象)和代理對象之間的差異
回答
代理對象是從模型類繼承的對象,但添加了一些功能,如狀態管理。這通常用於使您的模型不必從任何特殊類繼承。
數據傳輸對象是不是來自您的模型的對象,但它們表示相同的數據。您通常使用它們與不知道模型的服務進行通信。
DTO和代理對象不是EF概念,而是一般概念。
DTO或「數據傳輸對象」,是專門爲在應用程序的層或服務之間移動數據而創建的對象。使用DTO有幾個原因,但大多數情況下,層或服務之間所需的信息不同。例如:
你有很多性質的實體和服務客戶端或其他層只需要其中的幾個:創建一個DTO具有所需性能,原廠原包,從原來的實體的映射DTO,並在服務/圖層上公開DTO。
您需要公開具有來自不同實體的屬性的對象:創建具有所有必需屬性的DTO,將屬性從實體映射到DTO並將其公開。例如,您可能需要一個具有EF實體屬性的扁平對象和與其相關的「主表」(例如與FK相關的描述或名稱)
您需要暴露具有不同形狀的實體,數據或任何其他變化......
您可以通過多種方式實現映射:例如創建一個DTO構造函數接受原來的實體作爲參數,與映射的靜態方法創建一個靜態類。使用諸如ValueInjecter或AutoMapper之類的東西,可以使映射更容易一些。有時甚至可以直接使用它們,而無需執行任何其他事情來進行映射。但是,如果映射有點複雜,通常必須手動進行一些映射。
代理對象是完全不同的東西。 Literraly是表示另一個對象的對象。即,基本上與原始對象相似但與之不同的對象。這通常是爲了向對象添加額外的功能,保持它與原始意圖兼容。例如,可以代理一個對象來攔截方法調用以進行登錄或驗證。通常的技術是使用從原始對象動態繼承的框架,添加所需的行爲(這是典型的technique of AOP)。
在實體框架的情況下,您可以找到一個「更改跟蹤代理」的代理。這些對象是從原始實體動態繼承的對象,但添加了一些功能,可以讓它們跟蹤其變化:它們可以保存原始值,更改後的值,新狀態等。還允許它們實現延遲加載。 由於它們是原始對象的子類,它們具有相同的屬性,但具有不同的行爲。 Here is a short description of EF proxies。
- 1. 在Java中的DTO(數據傳輸對象)和類對象之間的區別?
- 2. 數據傳輸對象(DTO)與愚蠢的業務對象之間的區別?
- 3. AutoMapper:IDataReader和DTO對象之間的映射
- 4. 如何有效地使用DTO對象(數據傳輸對象)?
- 5. js對象之間的差異
- 6. C++對象,之間的差異的動態和靜態
- 7. 在Cassandra中識別數據庫對象之間的差異
- 8. 對象之間的高效數據傳輸 - C#
- 9. 在對象()和類myClass(對象)之間的__dict__ Python中的差異
- 10. C#發現對象數組之間的差異
- 11. 使用LINQ查找兩個數據對象之間的差異
- 12. 傳遞對象之間的數據
- 13. WCF-代理對象,服務對象和普通類對象之間的區別
- 14. 在Obj中的對象之間傳遞對象C
- 15. 命令對象和DTO差別?
- 16. OpenStack API - 動態大對象(DLO)和靜態大對象(SLO)之間的差異
- 17. DAL與BLL之間的傳輸對象
- 18. 數據傳輸對象(DTO)的要點是什麼?
- 19. 查找兩個C#對象之間的屬性差異
- 20. 發現n個對象數組之間的差異(包括其他對象)
- 21. 在c中的對象之間傳遞數據#
- 22. 在數值數組和數字對象之間傳輸圖像對象
- 23. 嵌入,對象和視頻的HTML標籤之間的差異?
- 24. 如何獲取字典對象中的鍵之間的差異總和C#
- 25. 差異傳遞常量和對象與const對象
- 26. 使用FetchResultController和ManagedObjectContext獲取對象之間的差異
- 27. JavaScript比較和返回對象之間的差異
- 28. xmlhttprequest(xhr)xhr.onerror和xhr.upload.onerror之間的對象差異
- 29. 平等和對象平等之間的差異
- 30. 之間的差異(目標)O == NULL和(((對象)O)== NULL
你讀這個'ProxyObject'的背景是什麼?順便說一下,你真的不應該使用帶EF的DTO。 – Aron
其實我正在使用webmodel並使用automapper將webmodel映射到實體類。然後,當我保存實體如何能夠從我已映射到實體的Web模型中獲取生成的id(自動遞增)。那麼是DTO模式還是什麼? – user3603255