Windows Phone アプリケーションのデータベースのバージョンを管理する方法
Windows Phone OS 7.1 から、分離ストレージにデータベースを作成することができます。
データベースを使用するWindows Phone アプリケーション を作成している中で、何度かデータベースのアップデートをすることがあると思います。
今回の記事では、テーブルのアップデートを管理する方法について記述します。
Windows Phone でデータベースを作成するには、データコンテキストを構築して、データベースを作成します。
// データベースが存在しない場合は、作成する using (WindowsPhoneDb mangoDb = new WindowsPhoneDb()) { if (!mangoDb.DatabaseExists()) { // データベースの作成 mangoDb.CreateDatabase(); } }
※ データベースの作成方法については、MSDN の" How to: Create a Basic Local Database Application for Windows Phone "を参照してください
これにより、アプリケーションはデータベースを作成します。
次に、Windows Phone でデータベースのスキーマのアップデートをおこなうには、まず現在のデータベースのバージョンを確認する必要があります。
データベースのバージョンやアップデートには、Microsoft.Phone.Data.Linq Namespace名前空間を参照します。
using Microsoft.Phone.Data.Linq;
Microsoft.Phone.Data.Linq Namespace名前空間を参照することで、DataContextにCreateDatabaseSchemaUpdaterが追加されます。
このCreateDatabaseSchemaUpdaterクラスには、DatabaseSchemaVersionプロパティというのがあります。
DatabaseSchemaUpdater updater = mangoDb.CreateDatabaseSchemaUpdater(); // 現在のデータベースのスキーマのバージョンを取得する int version = updater.DatabaseSchemaVersion;
このプロパティを使うことで、ローカルデータベースのスキーマのバージョンを取得することができます。
なお、スキーマのデフォルトバージョンは 0 となっています。
このバージョンを使うことで、Windows Phone のデータベースのアップデートを管理することができます。
using (WindowsPhoneDb mangoDb = new WindowsPhoneDb()) { if (!mangoDb.DatabaseExists()) { // データベースの作成 mangoDb.CreateDatabase(); } else { DatabaseSchemaUpdater updater = mangoDb.CreateDatabaseSchemaUpdater(); // 現在のデータベースのスキーマのバージョンを取得する int version = updater.DatabaseSchemaVersion; // 1回目のデータベースのアップデート if (version < 1) { UpdateDatabaseVersion1(); // スキーマのバージョン番号をアップデートする updater.DatabaseSchemaVersion = 1; updater.Execute(); } // 2回目のデータベースのアップデート if (version < 2) { UpdateDatabaseVersion2(); // スキーマのバージョン番号をアップデートする updater.DatabaseSchemaVersion = 2; updater.Execute(); } } }
なお、スキーマのバージョン番号をアップデートするには、DatabaseSchemaVersionプロパティをインクリメントしていけば、大丈夫です。
updater.DatabaseSchemaVersion = 1;
updater.Execute();
では最後に、実際に分離ストレージにあるローカルデータベース内で、バージョンの管理はどのようにしているか確認します。
データベースの中身を確認するには、Microsoft SQL Server 2008 R2 Management Studio Express (SSMSE) を使います。
※ SSMSE については、前回の記事をご確認ください
作成したデータベースの中身を確認すると、テーブル内に __VERSION テーブルが存在しています。
この __VERSION テーブルを右クリックして プロパティ > 列 を指定して確認すると、SchemaVersion カラムとDetaUpdated カラムが存在します。
SchemaVersion カラムでは、スキーマのバージョン番号が管理されており、
DetaUpdated カラムでは、スキーマのバージョンをアップデートした日時が保存されています。
なお、 __VERSION テーブルのアップデート情報は、スタックされていきます。
以上で、Windows Phone アプリケーションでデータベースのバージョンを管理する方法になります。
ggった参考サイト
neue cc - はぢめてのWindows Phone 7でのデータベース(Linq to Sql)
http://neue.cc/2011/05/30_325.html
Sergey Barskiy's Blog - SQL CE in Mango–Updating the Schema
http://dotnetspeak.com/index.php/2011/07/sql-ce-in-mangoupdating-the-schema/
ちょー調べました。
もしより良い方法がありましたら、Twitterでも、コメントでもくださいませませ。