目前,只要需要数据,我的应用程序就会通过ASP.NET XML Web服务从Microsoft SQL 2005数据库中提取数据。
我想更改我的应用程序以使其具有本地数据库,并且此数据库将检查数据是否已更改并将其自身同步到任何新数据。
如何判断是否有新数据?
我只计算SQL表中的行数,是否小于CoreData数据库中的行数,然后重新编写CoreData数据库?
有没有办法告诉我只同步已更改或已添加/删除的记录?
我应该在应用启动时同步所有数据,还是只同步与加载视图对应的表?
非常感谢任何帮助!
谢谢, -Mike
答案 0 :(得分:1)
如果你对模式设计很聪明,那么你可以。最好的选择可能是将“created_at”和“updated_at”日期字段添加到数据库表中(并在修改或创建记录时设置它们)。然后在同步请求查询中,选择日期大于本地数据库中最高日期的所有记录。这将适用于单向同步。双向同步更加困难,需要考虑联系解决方案。
至于同步,我建议尽可能在后台进行。在获取新记录时,您应该能够使用NSFetchedResultsController
来处理更新视图。这样用户就不会遇到任何恼人的加载屏幕。
答案 1 :(得分:0)
您需要一种方法来检测自上次连接以来数据库中已更改的内容。 SQL Server为此提供了两个框架:Change Tracking和Change Data Capture。有关两者的比较,请参阅Comparing Change Data Capture and Change Tracking。这些框架由.Net Sync Framework利用,以自动化数据同步。
不幸的是,这些都不在SQL Server 2005中。它们都是SQL Server 2008的功能,所以你必须升级。
使用SQL Server 2005,您只能手动跟踪更改。有几种方法,都是不完美的,它们都围绕触发器和跟踪表,或围绕使用TIMESTAMP跟踪行版本(问题始终是如何跟踪已删除的行)。
虽然Core-Data具有对同步的内置支持(请参阅Syncing Core Data Applications),但它不适用于您的方案。