2012-03-17 163 views
1

我有以下情形:微軟數據庫同步

服務器

  • SQL Server 2008的
  • 核心(實體框架和業務邏輯)
  • WCF服務
  • MVC Web應用程序(用於後端管理)

客戶

  • 本地數據庫 - 主數據庫的
  • WPF客戶

要求

  • 客戶端具有完全脫機工作的簡化模型,並堅持數據
  • 更改的數據應該從服務器通過WCF服務被拉
  • 客戶不應該改變的數據,但撥打AA WCF方法(如果沒有可用的隊列中的呼叫)

可能的解決方案

  • 微軟同步框架 - 我認爲它是一個矯枉過正,因爲我主要需要一種方式同步,並且數據結構也不相同。
  • 通過WCF進行數據集序列化,是的,因爲數據集支持合併和脫機場景,但不是它過時了嗎?
  • 實體框架?我試圖建立一個原型,但EF似乎並不支持我的需求非常好(我需要尋找一個實體,並改變它,如果修改或添加,如果沒有existant)

問題

  • 你認爲什麼是最合適的方法?
  • SQL Server Compact是一個不錯的本地數據庫嗎?

我對你的想法很感興趣。謝謝!

回答

0

在我看來,Microsoft Sync Framework不合適,因爲你有不同的模式。我還可以想象,您有一些關於哪些數據可以更改以及應該如何同步的業務規則。

DataSet和Entity Framework之間的選擇取決於您的需求。當你真的使用對象模型時,Object-Relation-Mapper會進入查看狀態。

如果您的域名足夠複雜,並且您已經掌握了使用全面的域模型的知識,那麼絕對是一個很好的解決方案,可以很好地擴展並處理複雜的項目。 如果您的項目比較簡單,並且您不想構建域模型,則可以選擇DataSets。

就我個人而言,我認爲學習域模型和實體框架作爲ORM的來龍去脈是項目的不錯選擇。當你有足夠的使用這些技術的經驗時,你甚至會在小項目上贊成他們。

關於您在EF原型中遇到的問題。

由於客戶端和服務器的數據模式不同,我會使用自定義數據傳輸對象在兩者之間移動數據。通過這種方式,可以將對象模型分離,並且可以彼此獨立地進行更改。

客戶端知道關於數據更改的一切信息。因爲它具有服務器數據的本地表示,所以它知道是否添加,更改或刪除數據。你爲什麼不把這些知識添加到你的服務器調用中?如果您在DTO中使用了一個表示對象是否已添加,修改或已刪除的字段,則服務器將不必檢測到該字段。

+0

謝謝你的深思熟慮的答案。在我的Prototype中,我實際上創建了一個Dto Object for Transfer。這個轉移對象我也用作實體存儲在客戶端。我想選擇一個最簡單的方法。客戶端確實只需要查詢數據。它所做的唯一更改是交易,而這些我最好在服務器上處理。 – Travis 2012-03-19 08:56:24