我正在构建一个C#应用程序,它使用云中的PostgresSQL数据库(版本9.3)进行存储。虽然我的办公室连接是光纤并且对数据库提供程序非常稳定,但我的客户可能不是这样。
我正在使用Devart Entity Developer版本5.5.164,当然还有点连接PostgreSQL提供程序。
问题是,在使用应用程序时,与数据库的连接是否失败,有哪些易于实现的选项可以将当前状态本地保存到PC(如果有的话),其次是当数据库重新启动时同步选项可用于确保本地PC上的数据成功写入数据库。
我考虑过一个主从属PostgreSQL类型设置,其中设置本地计算机以提供数据库,然后将每个更改复制到云。但是客户端不想管理另一个系统。所以这不是一个选择。
所以...任何想法?
答案 0 :(得分:1)
我尝试了SQLite <> PostgreSQL的在线/离线设置。根据我的经验,我强烈建议考虑:
我最终决定在Postgres上运行所有程序。同时,它带来了新的挑战:主机之间的同步。冲突问题由IT系统外部的组织责任解决。
答案 1 :(得分:0)
我认为本地的sqlite数据库可能是一个解决方案。
然后你可以遵循这样的策略:
依旧......
编辑:刚刚检查过,Devart Entity Developer支持sqlite: - )
答案 2 :(得分:0)
虽然已经仔细考虑了解决此问题的所有建议,但我决定将数据序列化并将其保存在检测到的失败连接上。这适用于我的情况,因为在客户端创建/更新记录时,系统只修改了几个表(六个)。我在执行最后的“保存数据”操作之前重试连接3次,然后锁定系统,以便通知最终用户,并且在数据连接稳定之前无法进行进一步更改。序列化数据的过程非常简单,很容易实现。
以下是您感兴趣的小样本:
var backupfile = String.Format("ModifiedGridTotals_Backup_{0}.xml", DateTime.Now.ToString("d-MMM-yyyy-HHmmss"));
var serializer = new XmlSerializer(typeof(List<GridTotal>));
serializer.Serialize(new XmlTextWriter(backupfile, Encoding.UTF8), ModifiedGridTotals);
恢复数据库连接后,我从磁盘读回这些文件并提交更改。