2011-01-28 46 views
7

我一直在使用EntityFramework查看很多WCF示例,其中大部分似乎都會將某種POCO或DTO類返回給客戶端。WCF服務應該返回一個EntityObject還是一個POCO/DTO類?

我想知道爲什麼這是因爲默認EntityObject包括[DataContract]屬性和執行INotifyPropertyChanged。返回一個DTO或POCO類比EntityObject(或反之亦然)更好?是否有特定的情況下使用一個返回值比另一個更好?

+1

[WCF,Entity Framework&Data Contracts]的可能重複(http://stackoverflow.com/questions/1121877/wcf-entity-framework-data-contracts) – 2011-01-28 05:09:42

回答

8

作爲一種最佳實踐,您應該確保它返回一個DTO/POCO類,該類明確設計爲數據協定並且沒有持久性邏輯。

原因是,如果您傳遞一個EntityObject,那麼您將假設服務的使用者將具有對同一數據上下文的引用,並且這違反了顯式邊界的SOA原則。它降低了您的服務的可重用性。

Microsoft很可能在EntityObject上實現了DataContract,以支持一些基於WCF的數據庫訪問工具,如RIA。 INotifyPropertyChanged用於WPF綁定支持,並且與WCF或數據協定無關。

+0

謝謝。是否通常會將DTO轉換回客戶端上的EntityObject,還是爲了客戶端的目的而創建新模型? – Rachel 2011-01-28 13:53:14

0

在您不知道持久性邏輯的某些情況下,返回POCO是值得的。我的意思是相同的POCO可以插入其他ORM或用於其他目的。好吧,這是POCO優於ORM的優點,但它還可以提高性能,而不是增加代理/通知程序運行時間的EntityObject。

返回POCO - 您必須手動更新從WCF收到的實體狀態。

返回EntityObject - 您將收到具有維護狀態的實體。

相關問題