Microsoft数据库同步

时间:2012-03-17 15:33:50

标签: c# sql-server entity-framework synchronization offline

我有以下情况:

服务器

  • SQL Server 2008
  • 核心(实体框架和业务逻辑)
  • WCF服务
  • MVC Web应用程序(用于后端管理)

客户端

  • 本地数据库 - 主数据库的简化模型
  • WPF客户端

要求

  • 客户端必须完全脱机工作,并保留数据
  • 应通过WCF服务从服务器提取更改的数据
  • 客户端不应更改数据,而应调用WCF方法(如果不可用,则调用队列)

可能的解决方案

  • Microsoft Sync Framework - 我觉得它太过分了,因为我主要需要单向同步,而且数据结构也不一样。
  • 通过WCF进行数据集序列化,是的,因为数据集支持合并和离线方案,但是不是它已经过时了吗?
  • 实体框架?我试图建立一个原型,但EF似乎并不能很好地支持我的需求(我需要搜索一个实体,如果修改则更改它,或者如果不存在则添加它)

问题

  • 您认为什么是最合适的方法?
  • SQL Server Compact是一个很好的本地数据库吗?

我对你的想法很感兴趣。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为Microsoft Sync Framework不合适,因为您有不同的架构。我还可以想象您有一些关于允许更改哪些数据以及如何同步数据的业务规则。

DataSet和Entity Framework之间的选择取决于您的需求。当您真正使用对象模型时,会出现一个Object-Relation-Mapper来查看。

如果您的域足够复杂并且您拥有使用完整的领域模型的知识,那么它肯定是一个很好的解决方案,可以很好地扩展并处理复杂的项目。 如果您的项目稍微简单,并且您不想构建域模型,则可以选择DataSet。

就我个人而言,我认为将域建模和实体框架作为ORM学习,这是项目的不错选择。当您有足够的使用这些技术的经验时,您甚至会喜欢它们在小型项目上。

关于您使用EF原型的问题。

由于客户端和服务器的数据模式不同,我会使用自定义数据传输对象在两者之间移动数据。这样,您可以将对象模型分离,并且它们可以彼此独立地更改。

客户端知道有关数据更改的所有信息。因为它具有服务器数据的本地表示,所以它知道是否添加,更改或删除了数据。为什么不将这些知识添加到服务器调用中?如果您在DTO中使用一个字段来说明该对象是否已添加,修改或删除,则服务器将不必检测到该字段。