MSDN Library
信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 的本地数据库迁移概述

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

从 Windows Phone OS 7.1 开始,您可以将关系数据存储在驻留在应用本地文件夹的本地数据库中。随着应用的发展,您可能需要在应用已经部署到手机后,对数据库的架构做出更改。如果这些更改不仅仅是添加列/索引/表,则需要创建一个新的数据库,并将数据从旧数据库迁移到新数据库。本主题概括介绍本地数据库迁移。有关在 Windows Phone 应用中使用本地数据库的更多信息,请参见 Windows Phone 8 本地数据库

说明注意:

迁移的替代方法是数据库更新。在更新中,可以执行累加性操作,例如,添加列、索引和表。有关更多信息,请参见演练:更新 Windows Phone 8 本地数据库应用

本主题包括以下部分。

在某些情况下,可能不需要执行数据迁移。Windows Phone SDK 7.1 提供了通过累加性操作升级本地数据库的 API。借助 DatabaseSchemaUpdater 类,可以通过以下方法更新已经部署到手机中的现有数据库:

这些方法应已涵盖绝大数的数据库架构更改。因为这些方法是严格的累加方法,因此通过这些方法进行的更改不太可能对用户数据产生负面影响。

重要说明重要说明:

我们建议不要执行数据库迁移,而是尽可能使用 DatabaseSchemaUpdater 类执行数据库更新。

执行数据库迁移的第一步是确定是否需要迁移。为此,应用需要确定在对象模型中定义的数据库架构与当前在手机上使用的数据库架构之间是否存在版本差异。

对象模型版本必须存储在应用程序包中的某处(代码或资源文件中)。当前数据库版本由平台维护,可以从 DatabaseSchemaUpdater 类的 DatabaseSchemaVersion 属性中获取。在启动时,应用应检查这些值是否不匹配。如果代码版本高于手机版本,则需要迁移。

所有迁移逻辑应该隔绝并封装在一个或多个迁移类中,这些类仅用于执行迁移。此逻辑不应与应用对象模型的任何部分混合在一起。如果存在应用可能将需要处理多个迁移路径的情况,则应提供一个可以返回相应迁移对象的工厂类。例如,工厂类可以拥有一个用于从版本 1.0 迁移到版本 1.2 的返回对象,以及一个用于从版本 1.1 迁移到版本 1.2 的返回对象。专用于处理迁移的代码的大小和复杂性与支持迁移路径的数量成正比;在进行架构更改时,应考虑将来的应用维护。

我们建议迁移代码管理迁移本身和绑定到 UI 的必要进度信息。进度信息基于步骤(第 2 步,共 5 步)或完成百分比(73% 已完成)。

重要说明重要说明:

避免在 OnNavigatedTo 事件中执行迁移。此方法的长时间操作可能会导致应用被操作系统终止。有关更多信息,请参见 Windows Phone 8 的应用性能注意事项中的最大程度地减少构造函数和 Loaded 事件中的代码

如果预见应用将需要数个迁移,则可能需要创建一个可以继承并为每个迁移路径扩展的基础类。例如,基础类可以处理开始迁移,并为其维护进度。

在调用 DatabaseSchemaUpdater 上的 Execute 之前,您的应用应更新 DatabaseSchemaVersion 属性。当运行 Execute 方法时,将会在相同事务中进行所有更改,包括架构修改和版本号更新。

如果存在不常访问的表,应用可以选择按需执行迁移。当用户进入这些应用的区域时,不必要求最终用户等待完全迁移,数据库迁移会被划分为数个相对较小的操作。例如,您可能希望将应用完整版本的迁移操作与试用版本相关的操作分离开来。此方法可以帮助优化试用用户的迁移体验。

在此版本中,无法从现有的数据库中删除列或表。即使对象属性不再与应用有关,迁移后关联的列仍然永久保留在数据库中。如果该未使用的列未在原始数据库定义中未定义为可为空值(通过 CanBeNull 列属性),则在为该行执行任何后续插入操作时,必须为该列指定非空值。

如果您的应用将某个表替换为另外一个表,并且不再使用旧表,则考虑删除旧表中的所有行以限制用于存储未使用数据的空间量。

本地数据库位于本地文件夹中。与本地文件夹中的其他文件类似,您可以使用 IsolatedStorageFile 类删除它。如果在迁移后不再需要旧数据库,我们建议应用将其删除。

在将迁移整合到应用中时,请考虑采用以下最佳做法:

  • 将与迁移和旧数据上下文相关联的类分隔到自己的命名空间中。例如,MyProject.v1DataModel 命名空间指示命名空间中的代码与第一个版本的数据模型相关联。

  • 在迁移类中,创建一个基于新版本数据模型的新数据库。

  • 在创建了新的数据库后,按表传输数据。对于由外键关系链接的表,请首先复制父表,然后复制子表。

  • 在迁移类中维护迁移状态。例如,在每个表完成复制时,更新迁移状态。如果在迁移完成前应用已终止,使用迁移状态可以有效地继续迁移。

  • 当复制具有分页的大表时,维持分页的状态,以便在重新激活时可以使用。

显示:
© 2016 Microsoft