WP7上的DatabaseSchemaUpdater错误

时间:2011-11-11 17:14:46

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

我使用DatabaseSchemaUpdater实现了一些db版本逻辑,发现了一个问题。

如果我执行此代码

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

并通过后退按钮离开应用程序 - 一切正常。架构版本已修改。

如果我通过开始按钮离开,然后再次启动应用程序(对于普通用户来说,通常情况下) - 没有更新任何内容。 db具有以前的版本。

调用Dispose()将解决这个问题,但是我们使用单个DataContext对象,因此这种方法对于这种情况会有点麻烦。

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

问题是:这种行为是否正常?停用和启动应用程序是否会破坏其他内容?有没有办法解决这些问题(Disposing除外)?

3 个答案:

答案 0 :(得分:2)

在过去的几个小时里,我遇到了同样的问题,我搜索了很多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);
}

当应用程序进入逻辑删除状态时,似乎数据库未正确更新,尽管官方文档明确指出:“当调用该方法(执行)时,所有更改都作为单个事务提交给本地数据库, 包括版本更新。“

答案 1 :(得分:0)

您错过了墓碑,这样您就可以将数据备份到隔离存储。

在Windows手机上处理数据时非常需要。下面的链接应该足以让您了解它的工作原理以及如何在应用程序中轻松实现它。

Tombstoning Video

答案 2 :(得分:0)

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