2010-02-26 45 views
12

去年,我使用Entity Framework(當然是.NET3.5)爲我們的項目開發了一個數據訪問服務,並使用Julie Lerhman的書作爲開發狀態跟蹤POCO對象的指南。我們使用WCF並擁有Silverlight 3客戶端。我們正在轉向.NET 4.0,我希望轉而使用代碼生成技術來消除編寫POCO類和翻譯類的浪費時間。EF4 POCO:Snapshot vs WCF的自我跟蹤

隨着我已經做了那裏的研究似乎是狀態跟蹤波蘇斯的3種方式:

1)變更跟蹤代理:似乎沒有對我們有用,因爲它似乎這不起作用了WCF序列化。

2)基於快照:快照取自POCO實體圖形檢索,來自客戶端的返回圖形與該快照進行比較,並比較差異...對我來說似乎很好。

3)自我跟蹤實體:代碼生成器生成在POCO對象內進行自我跟蹤的邏輯。這似乎接近我們現在所做的,除非它們都是爲我們生成的。

我想弄清楚所有這些方法之間的優點和缺點。我猜測1和2是「連接」的,並且他們需要POCO最初被查詢的ObjectContext保持不變,但一直未能證實這一點。我也沒有看到爲什麼任何人會真的打擾選項1,因爲選項3似乎做同樣的更多...

快照似乎是最簡單的,但如果這需要一個ObjectContext保持打開很長一段時間我不太確定...

我只是一個初級程序員,所以這裏的任何建議,特別是關於Silverlight 3(我相信選項2和3與Silverlight 3一起工作,但2可能有問題)非常感謝。

+0

作爲更新,我現在在我們的WCF/Silverlight 4應用程序中使用狀態跟蹤實體,它們工作得很好(雖然有刪除問題)。導航屬性現在是TrackableCollections,它從ObservableCollection派生出來,這樣就可以在夢中綁定到XAML。我非常推薦這個解決方案。 – MrLane 2010-07-15 04:44:04

+0

http://stackoverflow.com/questions/3814706/self-tracking-entities-vs-poco-entities和http://stackoverflow.com/questions/6116002/entity-framework-self-tracking-entities可能的重複-vs-poco – 2012-07-12 17:37:58

回答

14

跟隨選項3.自我跟蹤實體,因爲這是他們的設計目的。

This post給出了一個很好的示範「自我跟蹤實體進行序列化場景優化」。

+10

自我追蹤實體(STE)有一個主要缺點。您必須共享由T4代碼生成器生成的代碼才能使STE正常工作。這意味着您不能在客戶端使用數據服務引用元數據生成的類,因此僅限於.NET客戶端。 – 2010-02-28 08:55:30

+0

是的,您無法生成客戶端代理是正確的。我們手工編寫代理,並在客戶端分享代碼。從技術上講,你可以在你的.NET或Silverlight客戶端中共享包含實體的二進制文件(如果你的客戶端是Silverlight,你必須建立一個與Silverlight兼容的.dll)。 – MrLane 2013-11-01 08:09:25

+0

不再。 STE不再被推薦。 – DarthVader 2014-01-30 13:25:42

2

其他兩個選項僅適用於在objectcontext處於更改狀態時完成更改。你唯一的選擇是STE。通過STE,實體可以跟蹤自己的變化。將修改後的對象圖發送到服務器時,您可以按照下面所示進行更改。 db.Dustomers.ApplyChanges(customer); db.SaveChnages();

使用STE,您可以在類庫項目中創建您的entiites,並在WCF客戶端,silverlight客戶端,asp.net和wpf之間共享它們。因此,這可以讓您爲各種客戶重複使用實體。