2011-07-09 30 views
0

據我瞭解,代理POCO對象可以跟蹤變化只被附加到ObjectContext的。相反,STE軌道的變化甚至被分離。我很好奇爲什麼不支持內部實施STE行爲的POCO代理?代理POCO像自跟蹤實體

回答

1

把這隻作爲我的個人意見。

有沒有「自我跟蹤代理」,因爲當前的實現它會也沒有任何意義。爲什麼:

  • 自我跟蹤實體開發,以支持通過Web服務變更集場景中的實體能夠跟蹤在客戶端的變化,客戶端將通過這些修改到服務和實體將更改應用到一個新的上下文的實例。
  • 爲了使這項工作的客戶和服務必須共享自我跟蹤實體的實施。

是應該國營的使用。在任何其他情況下,他們沒有太多的感覺

  • 在的WinForms/WPF /服務應用程序直接訪問EF你不需要他們,這通常是一個糟糕的場景中使用它們,因爲你可以使用連接實體直。
  • 在Web應用程序中,您不需要它們,因爲它需要將其存儲在頁面(與視圖狀態相同)或會話/緩存中。第一種情況是設計方法,這種方法已經死了很多年了,你應該不使用它,而應該儘可能避免使用第二種情況。

那麼你在哪裏看到「自我跟蹤代理」的用法?你想用它們代替STE嗎?爲什麼?更重要的是如何? STE實現的主要優點是它們是可序列化的,而動態創建的代理不是!如果您檢查通過Web服務(WCF)的序列化如何工作,您將看到所有通過服務傳遞的可序列化類型必須知道服務何時啓動。否則,只會顯示基本的未被討論的內容。

+0

我甚至會在桌面應用程序和Web中使用它們。有兩點我不喜歡使用附屬實體。 1.改變保存隱含性。如果我修改了幾個實體,所有這些實體都將被保存。但是如果我只想保存其中的一個呢?在STE中,我可以明確告訴更新一個實體。 2.遇到異常時,ObjectContext可能處於不一致狀態。當我打電話給SaveChanges時,這個不一致將會發送到數據庫。 STE方法並非如此。 – SiberianGuy

+0

在這種情況下,您根本沒有使用EF--假設您沒有使用上下文作爲工作單元,否則您將無法找到您只需要保存修改子集的場景,因爲您正在尋找黑客。 –

+0

我的錯。我不想說我的主要目標是保存一部分修改。當我調用SaveChanges時,任何實體屬性修改都會進入數據庫,這讓我感到不舒服。我寧願顯式標記實體以更新調用_myRepository.Update(entity) – SiberianGuy