2011-12-08 52 views
2

http://msdn.microsoft.com/en-us/library/dd918848.aspx你如何處理「同步框架並不自動處理行的缺失,其不再符合過濾條件」

「重要的是要明白,一個範圍表和篩選器的組合是非常重要的。例如,您可以從customer_sales表中定義一個名爲sales-WA的過濾作用域,其中只包含華盛頓州的銷售數據。如果您在同一個表上定義另一個過濾器,例如sales-OR,則這是一個不同的作用域。您定義過濾器,請注意,Sync Framework不會自動處理不再滿足過濾條件的行的刪除操作。例如,如果用戶或應用程序更新用於過濾的列中的值,則行會從一個範圍轉移到另一個。行被髮送到t他是該行現在屬於的新範圍,但該行不會從舊範圍中刪除。應用程序必須處理這種情況。」

我只是想知道有人可以闡明如何處理一些輕‘同步框架並不自動處理行的缺失,其不再符合過濾條件’?

許多謝謝

回答

2

同步提供程序將(作爲供應步驟的一部分)自動創建邏輯刪除表和觸發器來跟蹤行刪除當行未被刪除但以這種方式更新以至於超出範圍時,那麼自動生成的模式將不會將這些日誌記錄爲刪除,並將它們記錄爲更新。因此,要擴展Microsoft示例,假定您的應用程序僅同步Washingto向華盛頓銷售代表發送數據。最初作爲華盛頓銷售進入的一些銷售被糾正並轉移到俄勒岡州。同步框架不會知道它應該從華盛頓代表的本地數據庫中刪除這些現在的俄勒岡州記錄。

你有幾個選項來解決這個問題:

  • 修改配置工具來生成,將處理情況觸發器,而不是默認的觸發器沒有。查看擴展SqlSyncScopeProvisioning來完成此操作。如果做得正確,這可能是最具規模/可擴展的解決方案。
  • 修改您的應用程序以檢測將行移出作用域的嘗試,並讓應用程序刪除該行並重新插入,而不是僅更新它(可能位於存儲過程中)。如果您已經使用存儲過程來處理更新,這可能是一個不錯的選擇。
  • 添加一個後臺服務或流程,查找與範圍不匹配的記錄並刪除它們。這可能最終成爲最簡單的解決方案 - 特別是如果您的應用程序已被部署。