2012-03-17 98 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