1

我正在构建一个 WinJS Metro 应用程序,它将在 Surface 和 Win8 平板电脑中运行。在发送到服务器之前使用 IndexedDB 存储本地数据。对于分发,我们可能会使用 SideLoading 或企业分发并避免使用 Store。为了测试,我正在创建 APP 包并发送给我的同事。 问题 1:每次我安装 app-package 时,它​​都会重新创建数据库和对象存储,而我想使用现有的数据库和对象存储来保留旧数据。 问题 2 - 我的意图是创建一个对象存储结构,捆绑一些主数据并与安装包一起分发。我现在可以通过代码在一定程度上实现这一点,但无法分离出数据库组件。 问题 3- 我还没有为win8找到一个好的索引数据库查看器,我可以在其中查看所有数据库、对象存储、结构和数据。

提前致谢 ...

4

4 回答 4

1

我已经围绕 indexeddb 编写了一个库,其中包含一种用于调试的查看器。您可以在 codeplex:linq2indexed上找到它。它还带有一个 nuget 包。我还写了一篇关于如何使用它的帖子。

我也有一个适用于网络的查看器,但尚未将其移植到 Windows 8。也许你可以试一试,我认为这并不难。您还可以在 codeplex 上通过 nuget en 找到查看器。有关查看器的更多信息,请查看此帖子

我希望这可以进一步帮助你。欢迎任何评论,改进,...。

于 2013-01-21T08:33:24.147 回答
1

因此,您要在这里解决一些问题:

问题 1

通过侧面加载应用程序,它将创建一个新的应用程序安装,进而创建一个新的应用程序被提供的路径。由于 IndexedDB 与应用程序的相关联,因此它将被丢弃(WinJS 有点特殊,因为它在技术上不是一个新域,但它是一个新的位置,它仍然可以从中提供服务)。

据我了解,由于应用程序包的更新方式,商店安装应用程序的方式不会触发这种情况。不幸的是,我认为这是一个你无法避免侧载包的问题。

问题 2

微软实际上在他们的博客上提供了一个用于调试 IndexedDB(它是一个小型 JS 库)的 UI 。我个人没有使用过它,但如果没有其他适合您的包装器,这将是一个很好的起点。

问题 3

要进行初始数据库加载,我将执行以下过程:

  • 监听onupgradeneeded事件
  • 在事件处理程序中读取应用程序提供的 JSON 文件,或将数据嵌入 JS 文件中(取决于大小)

这样,您可以为不同版本的数据库(甚至应用程序)拥有不同版本的数据。

于 2013-02-19T05:35:30.570 回答
0

要“预捆绑”索引数据库数据,我建议您创建一个批量导入器,以 JSON 格式从磁盘加载数据,然后对其进行迭代,根据需要添加数据。Kristof 的 linq2indexed 或我的db.js迭代可以很好地解决这个问题。

于 2013-01-21T16:20:17.747 回答
0

看起来 indexedDB 实例已附加到应用程序的发布。例如,在同一台机器(我的开发箱)中,我有一个版本 1.0.0.5 和 1.0.0.7。两者都使用不同的 indexeddb 存储和不同的数据集。我也卸载了任何与版本相关的数据库也被卸载。另外我认为我无法在覆盖模式下安装相同的版本(如果我错了,请纠正我)。虽然我确实了解这种实现的底层逻辑,但这本质上意味着我无法向我的应用程序发布补丁,因为在这种情况下将初始化持久数据。

我可以使用 SQLite 做到这一点吗?如果是,我需要遵循那条路线......

于 2013-01-29T02:54:06.653 回答