【问题标题】:DatabaseSchemaUpdater bug on WP7WP7 上的 DatabaseSchemaUpdater 错误
【发布时间】:2011-12-27 04:59:09
【问题描述】:

我使用 DatabaseSchemaUpdater 实现了一些数据库版本控制逻辑并发现了一个问题。

如果我执行这段代码

 updater.DatabaseSchemaVersion = updater.DatabaseSchemaVersion + new Random().Next(10)+1;
 updater.Execute();

并通过返回按钮离开申请 - 一切正常。架构版本已修改。

如果我按 开始 按钮离开,然后再次启动应用程序(在我看来,这对于普通用户来说是常见的情况)- 没有任何更新。数据库有以前的版本。

调用 Dispose() 将解决该问题,但我们使用单例 DataContext 对象,因此这种方法在这种情况下会有点笨拙。

https://www.dropbox.com/s/wfyvwvjd12wifgl/DBUpdTest.zip - 测试项目 - 您可以简单地启动应用程序,然后以不同的方式关闭,看看会发生什么(db ver 写在文本框中)。

问题是:这种行为正常吗?再次停用和启动应用程序会破坏其他东西吗?有没有办法解决这些问题(处置除外)?

【问题讨论】:

  • 为什么不为更新程序使用新的 DataContext?并用“使用”来称呼它
  • 当然,我们可以做到。但我会说这是一个黑客。并且没有记录在任何地方。很高兴了解该问题的性质。

标签: database windows-phone-7 sql-server-ce versioning


【解决方案1】:

在过去的几个小时里,我遇到了同样的问题,我在 Google 上搜索了很多。事实上,唯一对我有帮助的解决方案是在数据库上下文中使用 using 关键字。紧接着,我重新创建了数据上下文。

// _dataContext is static. By checking for null I make sure that the database
// creation and migration is only done once during the app lifecycle
if (_dataContext == null)
{
    // get the context
    using (_dataContext = new WorkTimesDataContext(IsoStoreDatabasefile))
    {
        // do DB creation
        // do DB migration
    }
    // now that the context is disposed, recreate it
    _dataContext = new WorkTimesDataContext(IsoStoreDatabasefile);
}

虽然官方文档明确指出:“当调用该方法(Execute)时,所有更改都作为单个事务提交到本地数据库,但似乎在应用程序进入墓碑状态时数据库没有正确更新, 包括版本更新。”

【讨论】:

  • 我也用这个解决方案:)
【解决方案2】:

您缺少墓碑,这将允许您将数据备份到您的独立存储。

在 windows phone 上处理数据时非常需要它。下面的链接应该足以让您了解它的工作原理以及如何轻松地将其实施到您的应用程序中。

Tombstoning Video

【讨论】:

  • erm.... 我真的不明白你的意思。我到底应该墓碑什么,我应该在什么时候恢复它,它对我的​​情况有什么帮助。你能通过添加墓碑来修复附加的项目吗?
  • 在您阅读和观看上述视频的过程中,您将了解什么是墓碑以及在何处以及如何使用它。在windows phone应用程序的制作中非常重要,我觉得不应该只给你答案,而是让你学习并解决它。
  • 在正确的情况下投票否决这个答案是粗鲁的,也是因为你的懒惰而没有公然给你答案而投票否决。墓碑是在 windows phone 上学习的最重要的事情之一,如果你不知道,你不应该为 windows mobile 手机开发。另外,如果你希望每个人总是给你直接的答案,你永远不会得到任何地方,意味着你在错误的工作领域。我要标记这个问题,记下所有这些以供将来参考,当有人很好地给出答案时,你尊重!
  • 您的回答没有解决我的问题,也没有帮助解决问题。您给我的参考资料对更新数据库版本没有任何帮助。
  • 您没有将数据库中的数据备份到隔离的存储中,这反过来会在您每次离开应用程序时重置您的数据。如果你做了一些工作,我的回答会解决这个问题。
【解决方案3】:

我遇到了同样的问题,因为我有 WP7 SDK 的测试版。一旦我安装了非测试版,它就会自行修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多