2011-07-29 21 views
2

是否有可能使用Entity類的對象作爲WCF服務上的Data Contract?所以我可以把它們發送到客戶端。這是不錯的設計方法嗎?是否可以使用實體作爲數據契約?

我希望我的實體類也可以用作DTO,因此我可以將從數據庫檢索到的數據發送到客戶端。

回答

4

是的。如果使用基於EntityObject的實體,則默認代碼生成器和T4模板應將它們標記爲DataContractDataMember屬性。如果您使用POCO,則必須修改模板以爲您生成這些屬性或手動創建POCO。

你需要使用這些屬性的原因是循環引用的問題。默認情況下,EF在關係的兩側創建導航屬性。在序列化期間,框架需要知道該循環引用的一些提示,否則將進入無限循環。爲避免實體必須標記爲[DataContract(IsReference=true)],並且一旦您使用DataContract屬性,則必須使用DataMember來標記每個序列化屬性。

關閉延遲加載也很重要,否則序列化將在每個導航屬性上觸發延遲加載,並且會在所有延遲加載的實體上遞歸執行此操作。所以,而不是單一的對象,你可以從你的服務返回所有的關係,所有的關係等。

+0

非常感謝Ladislav Mrnka。我真的很感激你的答案。有一個例子/教程將告訴我如何做到這一點。 – Josh

相關問題