2010-11-14 65 views
2

我在這裏有點困惑。實體框架/ WCF - 安全/智能發送實體對象到Silverlight客戶端?

我使用從數據庫建模的實體框架創建了我的POCO類。

很明顯,我想使用在客戶端過這些類(及其中的簿記將是很好,如果我想送他們回去,並重新連接)

我通過看課爲WCF服務引用而生成,並且通過互聯網發送似乎有點冗長,但在安全方面看起來沒有任何風險。

然而,我找不到任何關於這樣做的事情。我會走下一條完全糟糕的道路嗎?

幫助?

編輯:我想他們在技術上不是POCO類,如果我讓它們由EntityFramework從數據庫生成;只是爲了澄清任何可能的混淆。

回答

2

這是一個難以回答的問題,無需知道有關係統的更多細節,但最終無論是否將WCF服務合同中的EF實體公開爲正確的路徑都受您正在開發的應用程序的範圍和要求。

也許問自己以下問題,希望這將指導您的決定:

  1. 是它可能是你的關係模型和對象模型將需要發散?這可能受多種因素影響,但最常見的報告要求可能會強制您的數據庫模式(針對性能)的特定設計,而您不希望在應用程序對象模型中反映這些設計。在整個應用程序層使用DB生成的EF實體可以將您綁定到此數據庫設計
  2. 您擔心數據庫架構的更改可能需要您的客戶端重新生成其服務引用嗎?同樣,使用在整個應用程序層的EF實體是指(是否關注到客戶端或不)在你的數據庫架構實現的任何變化可能泡到服務接口,可能破壞客戶端的兼容性與接口
  3. 性能是一個問題嗎?正如你所提到的,生成的類是冗長的。您可能會在電線上運輸不必要的行李,這可能會得到優化。
  4. 您是否關心在線路和客戶端公開數據庫模式和持久性機制的實現細節?鑑於您已經從數據庫生成模型,可能會有一些屬性公開有關您的架構和持久性機制的信息,這些信息對於客戶來說是冗餘的。

總而言之,暴露EF實體可能是可以接受的,但通常我會設計更改並實施某種模式,將EF實體映射到輕量級的「持久性」無知「POCO在您的repository層。 EF 4。0的確提供了對返回POCO的上下文進行編碼的能力,但在我當前的項目中,我們使用codegen的上下文,然後使用automapper將EF實體映射到我們的數據合同。在存儲庫層之外,沒有任何東西能夠意識到EF實體,並且我認爲這允許更加可維護和可靠的設計。