情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

チュートリアル: Windows Phone 8 のローカル データベース アプリを更新する

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

Windows Phone OS 7.1 以降、アプリのローカル フォルダーに存在するローカル データベースにリレーショナル データを格納できます。アプリが進化するにつれ、デバイスにアプリを配置した後でデータベースのスキーマを変更する必要が生じる場合があります。スキーマ更新のほとんどに、DatabaseSchemaUpdater クラスを使用できます。DatabaseSchemaUpdater では、アプリ更新の一部として、列、インデックス、テーブル、および関連付けをローカル データベースに追加できます。このチュートリアルでは、ローカル データベース サンプルのアプリを例に使用して、ローカル データベースを更新する方法を説明します。Windows Phone アプリでのローカル データベースの使用の詳細については、「Windows Phone 8 のローカル データベース」を参照してください。

メモメモ:

単なる列やインデックス、テーブルの追加を超える幅広い変更が必要なローカル データベースの場合は、新しいデータベースを作成して、古いデータベースから新しいデータベースへデータを移行しなければならない可能性があります。詳細については、「Windows Phone 8 のローカル データベース移行の概要」を参照してください。

このチュートリアルでは、ローカル データベース サンプルを 2 度更新します。最初の更新では、各タスクの優先順位を保存するための列を追加します。2 度目の更新では、Items テーブルにインデックスを追加します。チュートリアルの各段階を終えた後、分離ストレージ エクスプローラーを使用して、以前のバージョンのデータベースからの更新をテストします。分離ストレージ エクスプローラーの詳細については、「Windows Phone 8 の分離ストレージ エクスプローラー ツールを使用する方法」を参照してください。

このチュートリアルを完了した後の更新後のローカル データベース サンプルは、次の例のようになります。

AP_Con_LocalDatabaseUpdate_Features

この例では、最初の更新の一部として追加した、優先順位の列で、各タスクの色をタスクの優先順位に基づいて変更できます。優先順位の割り当てられていない項目は、白色のままとなります。次のイメージは、新しい優先順位機能がメイン ページと新しいタスク ページでどのように使用されるかを示します。

このトピックは、次のセクションで構成されています。

このセクションでは、ローカル データベース サンプルを実行し、いくつかのタスクをデータベースに追加し、データベースのコピーを保存します。このコピーは、このチュートリアルの後の方で更新後のテストに使用します。ローカル データベース サンプルの動作の詳細については、「Windows Phone 8 用の MVVM でローカル データベース アプリを作成する方法」を参照してください。

メモメモ:

データベース スキーマのバージョンはデータベース作成時に明示的に指定しないため、ローカル データベース サンプルの DatabaseSchemaVersion プロパティは、このチュートリアルの開始時には 0 になっています。次のバージョンのデータベースに関連した混乱を防ぐために、このチュートリアルではバージョン 1 を飛ばします。

バージョン 0 のベースライン データベースを作成するには

  1. ローカル データベース サンプル (C#) をダウンロードし、使用しているコンピューター上のフォルダーにプロジェクトを保存します。

  2. プロジェクトを解凍して、Visual Studio で開きます。

  3. F5 キーを押してデバッグを開始し、アプリをテストします。

  4. エミュレーターまたはデバイスで、アプリ バーの [add] ボタンをタップして、アプリにいくつかのタスクを追加します。アプリの各ピボット ページでタスクを表示するには、[Home]、[Work]、および [Hobbies] の各カテゴリでタスクを追加します。

    ヒントヒント:

    Windows Phone エミュレーターを使用している場合は、Page Up キーを押して、キーボードでテキスト値を入力します。

    次のイメージに、[home task]、[work task]、[hobby task] の 3 つのタスクを持つ、バージョン 0 のデータベースを示します。

    AP_Con_LocalDatabaseUpdate_Baseline0
  5. [デバッグ] メニューの [デバッグの停止] をクリックします。エミュレーターを閉じたり、デバイスのテザリングを中止したり、エミュレーターやデバイスからアプリを起動しないでください。

  6. コンピューター上に「LocalDatabaseVersion0」という名前のフォルダーを作成します。このフォルダーは、バージョン 0 データベース スキーマのベースライン データベースを格納する際に使用されます。

  7. 分離ストレージ エクスプローラーを使用して、ローカル データベースをアプリから LocalDatabaseVersion0 フォルダーにコピーします。詳細については、「Windows Phone 8 の分離ストレージ エクスプローラー ツールを使用する方法」を参照してください。次の例は、データベース ファイルをエミュレーターから c:\LocalDatabaseVersion0\ToDo.sdf にコピーします。

    ISETool.exe ts xd 77a80316-384d-40dc-a8c3-c4054676e85c "C:\LocalDatabaseVersion0"
    

    GUID 値は、アプリ マニフェエスト ファイルに含まれているアプリの Product ID に対応しています。アプリの Product ID は、この例で使用されている ID とは異なる場合があります。

  8. これで、バージョン 0 データベース スキーマのデータベースがコピーされました。このデータベース ファイルでは、分離ストレージ エクスプローラーのスナップショット復元コマンド (rs) を使用して、ローカル データベースを更新前の日付にロールバックできます。

このセクションでは、2 つ目のバージョンのアプリとローカル データベース スキーマを準備します。バージョン 2 では、タスクの優先順位に基づいて各タスクの色を変更できます。

この機能を実装するために、以下のファイルを更新または追加します。

  • Model\ToDoDataContext.cs: このファイルを更新して、優先順位のための新しい列を定義します。

  • ViewModel\ToDoViewModel.cs: このファイルを更新して、新しいタスクのための有効な優先順位のリストを提供します。

  • NewTaskPage.xaml および NewTaskPage.xaml.cs: これらのファイルを更新して、新しいタスクに関連付ける優先順位を指定するための ListPicker コントロールを追加します。

  • PriorityToColorConverter.: このファイルを追加して、タスクの優先順位を SolidColorBrush オブジェクトに変換します。これを、メイン ページの UI 内に表示されるタスクにバインドできます。

  • MainPage.xaml: このファイルを更新して、タスクの色を対応するタスク優先順位にバインドします。

  • App.xaml.cs: このファイルを修正して、データベース更新ロジックを追加します。

バージョン 2 を準備するには

  1. ファイル Model\ToDoDataContext.cs 内の ToDoItem クラスに次のコードを追加します。

    // Define Priority: field, public property, and database column.
    // Added in Version 2 of the application.
    private int? _priority;
    
    [Column(CanBeNull = true)]
    public int? Priority
    {
        get { return _priority; }
        set
        {
            if (_priority != value)
            {
                NotifyPropertyChanging("Priority");
                _priority = value;
                NotifyPropertyChanged("Priority");
            }
        }
    }
    
    

    このコードは、Priority という名前の新しいデータベース列を定義します。このコードがクラス内に現れる順番は、問題ではありません。CanBeNull 列の属性により、データベース内の既存データに新しい列との互換性を持たせることができます。

  2. ファイル ViewModel\ToDoViewModel.cs 内の ToDoViewModel クラスに次のコードを追加します。

    // Valid priorities for new tasks.
    // Added in Version 2 of the application.
    private List<int> _prioritiesList = new List<int> { 1, 2, 3 };
    public List<int> PrioritiesList
    {
        get { return _prioritiesList; }
    }
    
  3. ファイル NewTaskPage.xaml で、StackPanel のすぐ下にある ContentPanel という名前の categoriesListPicker に次のコードを追加します。

    <!-- Added in Version 2 of the application. -->
    <TextBlock 
        Text="Priority"
        Style="{StaticResource PhoneTextNormalStyle}"
        />
    <toolkit:ListPicker
        x:Name="priorityListPicker"
        ItemsSource="{Binding PrioritiesList}">
    </toolkit:ListPicker>
    <!-- End of Version 2 update. -->
    
    

    このコードは、新しいタスクに関連付ける優先順位を指定するための ListPicker コントロールを追加します。

  4. ファイル NewTaskPage.xaml.cs で、newToDoItem オブジェクトを作成するコードを次のように更新して、Priority プロパティを指定します。

    // Create a new task.
    ToDoItem newToDoItem = new ToDoItem
    {
        ItemName = newTaskNameTextBox.Text,
        Category = (ToDoCategory)categoriesListPicker.SelectedItem,
    
        // Set the priority of the new task to the specified priority.
        // Added in Version 2 of the application.
        Priority = (int)priorityListPicker.SelectedItem
    };
    
    
  5. ソリューション エクスプローラーで、プロジェクトを右クリックし、[追加] を選択して、[新しい項目] をクリックします。

  6. [新しい項目の追加] ウィンドウで、[コード ファイル] を選択し、ファイルに「PriorityToColorConverter.cs」という名前を付けます。次に、[追加] をクリックします。

  7. ファイル PriorityToColorConverter.cs のコードをすべて削除して、次のコードに置き換えます。

    using System;
    using System.Windows.Media;
    using System.Windows.Data;
    
    namespace LocalDatabaseSample
    {
        // Convert task priority to a brush that can be bound to in the UI.
        // Added in Version 2 of the application.
        public class PriorityToColorConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                // Allow for tasks that have no priority.
                int? priority = (int?)value;
    
                // Assign color based on priority.
                switch (priority)
                {
                    case null:
                        return new SolidColorBrush(Colors.White);
                    case 1:
                        return new SolidColorBrush(Colors.Red);
                    case 2:
                        return new SolidColorBrush(Colors.Yellow);
                    case 3:
                        return new SolidColorBrush(Colors.Green);
                    default:
                        return new SolidColorBrush(Colors.White);
                }
            }
    
            // Unused; required for IValueConverter implementation.
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            { throw new NotImplementedException();}
        }
    }
    
    
  8. ファイル MainPage.xaml で、phone:PhoneApplicationPage 要素に次の属性を追加します。

        xmlns:local="clr-namespace:LocalDatabaseSample"
    

    このコードは、PriorityToColorConverter をメイン ページで使用するために必要な名前空間を追加します。

  9. MainPage.xaml で、phone:PhoneApplicationPage.Resources という名前の DataTemplate の上にある ToDoListBoxItemTemplate 要素に次の要素を追加します。

    <!-- Resource & namespace specified in Version 2 of the application. -->
    <local:PriorityToColorConverter x:Key="PriorityToColorConverter" />     
    
    

    このコードは、メイン ページに PriorityToColorConverter をリソースとして追加します。

  10. MainPage.xaml で、DataTemplate という名前の ToDoListBoxItemTemplate 内で、次のように TextBlock プロパティを指定して Foreground を更新します。

    <!-- Foreground specified in Version 2 of the application. -->
    <TextBlock 
        Text="{Binding ItemName}" 
        FontSize="{StaticResource PhoneFontSizeLarge}" 
        Grid.Column="1" Grid.ColumnSpan="2" 
        VerticalAlignment="Top" Margin="-36, 12, 0, 0"
        Foreground="{Binding Priority, Converter={StaticResource PriorityToColorConverter}}"
        />
    
    

    このコードは、PriorityToColorConverter リソースに基づいて、タスク テキストの背景色を優先順位にバインドします。

  11. ファイル App.xaml.cs で、ページの先頭に次のディレクティブを追加します。

    // Directive for DatabaseSchemaUpdater
    // Added in Version 2 of the application.
    using Microsoft.Phone.Data.Linq;
    
    

    これは、以下の手順の 1 つで DatabaseSchemaUpdater オブジェクトを作成するために使用されます。

  12. ファイル App.xaml.cs で、App クラスに次のコードを追加します。

    // The current version of the application.
    public static int APP_VERSION = 2;
    
    
  13. App.xaml.cs で、using という名前の ToDoDataContextdb ステートメントを次のステートメントに置き換えます。

    using (ToDoDataContext db = new ToDoDataContext(DBConnectionString))
    {
        // Create the database if it does not exist.
        if (db.DatabaseExists() == false)
        {
            // Create the local database.
            db.CreateDatabase();
    
            // Prepopulate the categories.
            db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Home" });
            db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Work" });
            db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Hobbies" });
    
            // Save categories to the database.
            db.SubmitChanges();
    
            // Set the new database version.
            DatabaseSchemaUpdater dbUpdater = db.CreateDatabaseSchemaUpdater();
            dbUpdater.DatabaseSchemaVersion = APP_VERSION;
            dbUpdater.Execute();
        }
        else
        {
            // Check whether a database update is needed.
            DatabaseSchemaUpdater dbUpdater = db.CreateDatabaseSchemaUpdater();
                                            
            if (dbUpdater.DatabaseSchemaVersion < APP_VERSION)
            {
                // Add the Priority column (added in version 2).
                dbUpdater.AddColumn<ToDoItem>("Priority");
    
                // Add the new database version.
                dbUpdater.DatabaseSchemaVersion = 2;
    
                // Perform the database update in a single transaction.
                dbUpdater.Execute();
            }
        }
    }
    
    

    このコードは、else ステートメントに if 句を追加して、アプリが必要に応じてデータベースを更新できるようにします。変更は、Execute オブジェクトから dbUpdater メソッドが呼び出されるまではデータベースに反映されません。

  14. [ビルド] メニューの [リビルド] をクリックして、ソリューションを再度ビルドします。Visual Studio Express に [ビルド] メニューが表示されない場合は、[ツール] メニューの [設定] をクリックし、[上級者用の設定] を選択して、このメニューを有効にします。

  15. これで、ローカル データベース サンプル アプリへの、バージョン 2 にするための更新が完了しました。F5 キーを押してアプリを実行して、アプリが機能するかどうかテストします。

    メモメモ:

    Visual Studio の状態によっては、この時点では、エミュレーターまたはデバイスに保存したデータがアプリに表示されない場合もあります。次のセクションでは、バージョン 0 のデータベースのデータを復元します。

このセクションでは、アプリのデータベースを更新したコードをテストします。ここまで作業した時点での Visual Studio の状態によっては、エミュレーターまたはデバイスにバージョン 0 のデータベースのデータが現れない場合があります。

アプリの更新をシミュレートするために、分離ストレージ エクスプローラーを使用してバージョン 0 のデータベースを復元します (新しいバージョンのアプリをデバイスに展開した後)。デバイス上のアプリを Windows Phone ストア で更新した場合、更新されるのはアプリ コードだけです。アプリ更新処理では、ローカル フォルダーには変更は加えられません。

データベースの更新をテストするには

  1. [ビルド] メニューの [リビルド] をクリックして、ソリューションを再度ビルドします。Visual Studio Express に [ビルド] メニューが表示されない場合は、[ツール] メニューの [設定] をクリックし、[上級者用の設定] を選択して、このメニューを有効にします。

  2. F5 キーを押してデバッグを開始します。これにより、新しいバージョンのアプリがエミュレーターまたはデバイスに展開されます。

    メモメモ:

    分離ストレージ エクスプローラーでアプリのローカル フォルダーにコピーするには、アプリの少なくとも 1 つのインスタンス (同じ Product ID を持つ) がエミュレーター上またはデバイス上に存在する必要があります。デバッガーを実行すると、この条件が満たされます。

  3. [デバッグ] メニューの [デバッグの停止] をクリックします。エミュレーターを閉じたり、デバイスの電源を切ったりしなでください。これによりアプリが閉じられ、ローカル フォルダー内にあるローカル データベース ファイルのコントロールが解放されます。

  4. 分離ストレージ エクスプローラーを使用して、エミュレーターまたはデバイスの LocalDatabaseVersion0 フォルダーからバージョン 0 のデータベースを復元します。詳細については、「Windows Phone 8 の分離ストレージ エクスプローラー ツールを使用する方法」を参照してください。次の例は、バージョン 0 のデータベース ファイルを c:\LocalDatabaseVersion0\ToDo.sdf からエミュレーターにコピーします。

    重要:重要:

    データベースを正常に復元するために、このコマンドを実行するときには、必ずアプリが (デバッガーでも、デバッガーなしでも) 実行中でないことを確認してください。アプリが廃棄された場合は、デバイスが [スタート] に移動するまで [戻る] ボタンを押し続けて、そのアプリ スタックからの削除も行う必要がある可能性があります。

    ISETool.exe rs xd 77a80316-384d-40dc-a8c3-c4054676e85c "C:\LocalDatabaseVersion0"
    

    GUID 値は、アプリ マニフェエスト ファイルに含まれているアプリの Product ID に対応しています。アプリの Product ID は、この例で使用されている ID とは異なる場合があります。

  5. これでアプリが、ストア の更新をシミュレートできる状態になりました。新しいバージョンのアプリをバージョン 0 のデータベースで実行する直前の状態です。データベース更新のコードをステップ実行するために、App.xaml.cs ファイルの次のコード行にデバッグのブレークポイントを設定します。

    if (db.DatabaseExists() == false)
    
  6. F5 キーを押してデバッグを開始します。アプリの新しいバージョンがデバイスに再展開され、バージョン 1.0 のデータベースでの実行が開始されます。

  7. デバッガーがブレークポイントまで到達した後は、[ステップ オーバー] ボタンをクリックして、データベース更新コード全体をステップ実行していきます。データベースの更新前後の dbUpdater オブジェクトの DatabaseSchemaVersion プロパティの値を確認します (dbUpdater オブジェクト名にマウスを重ねます)。

    次の例は、Execute メソッドの呼び出し前 (赤色の矢印) と後 (青色の矢印) の dbUpdaterDatabaseSchemaVersion を示しています。

    AP_Con_LocalDatabaseUpdate_Debugging
  8. ブレークポイントを削除し、F5 キーを押して、デバッグを開始してアプリの実行を続行します。アプリが開始され、次のイメージに示すように、バージョン 0 のベースラインで保存したタスクが表示されます。

    AP_Con_LocalDatabaseUpdate_Baseline0

    バージョン 0 のアプリで作成されたタスクは優先順位の値が関連付けられていないため、PriorityToColorConverter により White の色が割り当てられています。

  9. 更新のテストが終了したらデバッグを終了します。[デバッグ] メニューの [デバッグの停止] をクリックします。エミュレーターを閉じたり、デバイスの電源を切ったりしなでください。これによりアプリが閉じられ、ローカル フォルダー内にあるローカル データベース ファイルのコントロールが解放されます。

このセクションでは、バージョン 2 のアプリを実行し、いくつかのタスクをデータベースに追加し、データベースのコピーを保存します。このコピーは、次のバージョンのデータベース更新コードのテストに使用します。

バージョン 2 のベースライン データベースを作成するには

  1. バージョン 2 のアプリが実行されていない場合は、F5 キーを押して、デバッグを開始してアプリをテストします。

  2. エミュレーターまたはデバイスで、アプリ バーの [add] ボタンをタップして、アプリにさまざまな優先順位と完了状態を持つ新しいタスクをいくつか追加します。必要であれば、新しいタスク用の空間を作るために、バージョン 0 のベースラインからタスクを削除します。

    次のイメージは、バージョン 0 から復元された一連のタスクと、優先順位のためのアプリの新機能を見せる一連の新しいタスク、[task priority 1]、[task priority 2]、および [task priority 3] を持ったバージョン 2 のデータベースを示しています。

    AP_Con_LocalDatabaseUpdate_Baseline2
  3. [デバッグ] メニューの [デバッグの停止] をクリックします。エミュレーターを閉じたり、デバイスの電源を切ったりしなでください。

  4. コンピューター上に「LocalDatabaseVersion2」という名前のフォルダーを作成します。このフォルダーは、バージョン 2 データベース スキーマのベースライン データベースを格納する際に使用されます。

  5. 分離ストレージ エクスプローラーを使用して、ローカル データベースをアプリから LocalDatabaseVersion2 フォルダーにコピーします。詳細については、「Windows Phone 8 の分離ストレージ エクスプローラー ツールを使用する方法」を参照してください。次の例は、データベース ファイルをエミュレーターから c:\LocalDatabaseVersion2\ToDo.sdf にコピーします。

    ISETool.exe ts xd 77a80316-384d-40dc-a8c3-c4054676e85c "C:\LocalDatabaseVersion2"
    

    GUID 値は、アプリ マニフェエスト ファイルに含まれているアプリの Product ID に対応しています。アプリの Product ID は、この例で使用されている ID とは異なる場合があります。

  6. これで、バージョン 2 データベース スキーマのデータベースがコピーされました。データベース スキーマに将来の更新を加えるための次のセクションに進みます。

このセクションでは、3 つ目のバージョンのアプリとローカル データベース スキーマを準備します。バージョン 3 では、データベースへのセカンダリ インデックスの追加と、複数の更新経路を考慮したデータベース更新ロジックの準備を行う方法を示します。

重要:重要:

ユーザーがアプリのすべての更新をインストールするとは限りません。アプリの起動時に、デバイスのデータベース ファイルが以前のいずれかのアプリ バージョンである可能性があることを考慮する必要があります。

バージョン 3 を準備するには

  1. ファイル Model\ToDoDataContext.cs の先頭に次のディレクティブを追加します。

    // Directive for Index attribute.
    // Added in Version 3 of the application.
    using Microsoft.Phone.Data.Linq.Mapping;
    
    
  2. Model\ToDoDataContext.cs で、ToDoItem クラスの [Table] 属性のすぐ下に次の LINQ to SQL マッピング属性を追加します。

    // Index added in version 3 of the application.
    [Index(Columns = "Priority", Name = "PriorityIndex")]
    

    このコードは、優先順位列に関する昇順のインデックスを追加します。このインデックスのデータベースへの追加は、純粋にデモンストレーション目的だけで行ったものです。対応するパフォーマンスの利点を得るためのアプリの更新は、このトピックで扱う内容に含まれていません。

  3. ファイル App.xaml.cs で、App クラスの APP_VERSION プロパティを更新します。

    // The current version of the application.
    public static int APP_VERSION = 3;
    
    
  4. App.xaml.cs で、using という名前の ToDoDataContextdb ステートメントを次のように更新します。

    using (ToDoDataContext db = new ToDoDataContext(DBConnectionString))
    {
        // Create the database if it does not exist.
        if (db.DatabaseExists() == false)
        {
            // Create the local database.
            db.CreateDatabase();
    
            // Prepopulate the categories.
            db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Home" });
            db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Work" });
            db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Hobbies" });
    
            // Save categories to the database.
            db.SubmitChanges();
    
            // Set the new database version.
            DatabaseSchemaUpdater dbUpdater = db.CreateDatabaseSchemaUpdater();
            dbUpdater.DatabaseSchemaVersion = APP_VERSION;
            dbUpdater.Execute();
        }
        else
        {
            // Check whether a database update is needed.
            DatabaseSchemaUpdater dbUpdater = db.CreateDatabaseSchemaUpdater();
    
            if (dbUpdater.DatabaseSchemaVersion < APP_VERSION)
            {
                // Perform version 2.0 update, as applicable.
                if (dbUpdater.DatabaseSchemaVersion < 2)
                {
                    // Add the Priority column (added in version 2.0).
                    dbUpdater.AddColumn<ToDoItem>("Priority");
                }
    
                // Add the Priority index (added in version 3.0).
                dbUpdater.AddIndex<ToDoItem>("PriorityIndex");
    
                // Set the new database version.
                dbUpdater.DatabaseSchemaVersion = 3;
    
                // Perform the database update in a single transaction.
                dbUpdater.Execute();
            }
        }
    }
    
    

    このコードは、else 句を更新して、PriorityIndex という名前のセカンダリ インデックスを追加し、必要に応じて Priority 列を追加します。ユーザーがアプリのすべての更新をインストールするとは限りません。アプリの起動時に、デバイスのデータベース ファイルが以前のいずれかのアプリ バージョンである可能性があることを考慮する必要があります。

  5. [ビルド] メニューの [リビルド] をクリックして、ソリューションを再度ビルドします。Visual Studio Express に [ビルド] メニューが表示されない場合は、[ツール] メニューの [設定] をクリックし、[上級者用の設定] を選択して、このメニューを有効にします。

  6. これで、アプリへのバージョン 3 の更新が完了しました。次のセクションに進んで、データベースの前のバージョンからのデータベースの更新をテストしてください。

このセクションでは、さまざまなバージョンのデータベース スキーマからのアプリ更新をシミュレートすることにより、バージョン 3 のデータベース更新ロジックをテストします。ユーザーは、アプリの更新をすべてインストールしないかもしれません。データベース更新ロジックが、必要に応じてデータベース スキーマの以前のバージョンからでも実行できるようになっていることが重要です。

バージョン 0 からバージョン 3 への更新をテストするには

  • バージョン 0 データベース スキーマに対して、バージョン 3 データベース更新ロジックをテストします。LocalDatabaseVersion0 フォルダーに保存されているデータベースで、このチュートリアルの前の方の「データベース更新のテスト」で説明したプロセスを使用して、テストを行います。

    たとえば、次のコマンドライン ステートメントは、バージョン 0 のデータベース ファイルを c:\LocalDatabaseVersion0\ToDo.sdf からエミュレーターにコピーします。

    ISETool.exe rs xd 77a80316-384d-40dc-a8c3-c4054676e85c "C:\LocalDatabaseVersion0"
    

    GUID 値は、アプリ マニフェエスト ファイルに含まれているアプリの Product ID に対応しています。アプリの Product ID は、この例で使用されている ID とは異なる場合があります。

    バージョン 0 データベースが含まれるバージョン 3 アプリを起動すると、バージョン 0 ベースラインで保存したタスクだけが表示されます。

    AP_Con_LocalDatabaseUpdate_Baseline0

バージョン 2 からバージョン 3 への更新をテストするには

  • バージョン 2 データベース スキーマに対して、バージョン 3 データベース更新ロジックをテストします。LocalDatabaseVersion2 フォルダーに保存されているデータベースで、このチュートリアルの前の方の「データベース更新のテスト」で説明したプロセスを使用して、テストを行います。

    たとえば、次のコマンドライン ステートメントは、バージョン 2 のデータベース ファイルを c:\LocalDatabaseVersion2\ToDo.sdf からエミュレーターにコピーします。

    ISETool.exe rs xd 77a80316-384d-40dc-a8c3-c4054676e85c "C:\LocalDatabaseVersion2"
    

    GUID 値は、アプリ マニフェエスト ファイルに含まれているアプリの Product ID に対応しています。アプリの Product ID は、この例で使用されている ID とは異なる場合があります。

    バージョン 2 データベースが含まれるバージョン 3 アプリを起動すると、バージョン 2 ベースラインで保存したタスクだけが表示されます。

    AP_Con_LocalDatabaseUpdate_Baseline2

このセクションでは、分離ストレージ エクスプローラーを使用して、アプリに関連付けられているローカル フォルダー コンテナーをクリアします。以前のバージョンのデータベース スキーマでアプリをテストする一方で、以前のバージョンのデータベースが自分のデバイスに入っていない新規ユーザーのエクスペリエンスもテストしておいた方がよいでしょう。これを行うには、エミュレーターを再起動したり、デバイスからアプリをアンインストールすることもできますが、分離ストレージ エクスプローラーでデータベースを削除するのが便利な方法です。

ヒントヒント:

分離ストレージ エクスプローラーをコマンド ウィンドウ (Cmd.exe) で使用している場合は、上下の矢印キーを使用してコマンド履歴をさかのぼれば、以前実行したコマンドを簡単に再入力し、編集して使用することができます。

空のフォルダーを作成するには

  1. ベースライン データベース フォルダーの 1 つをコピーします (たとえば、LocalDatabaseVersion2)。

  2. そのフォルダーを LocalDatabaseEmpty に名前変更します。

  3. ローカル データベース ファイルが入っているフォルダーまで移動します。たとえば、c:\LocalDatabaseEmpty などです。

  4. ローカル データベース ファイル (ToDo.sdf という名前が付いている) を削除します。

  5. これで、空のローカル フォルダーのスナップショットが作成できました。このフォルダーをエミュレーター上またはデバイス上のアプリに復元すれば、アプリのローカル フォルダーからデータベース ファイルが削除されます。

ローカル データベースを削除するには

  • LocalDatabaseEmpty フォルダーにキャプチャされた空のローカル フォルダーを復元します。このチュートリアルの前の方の「データベース更新のテスト」で説明した手順とよく似た手順を使用します。

    たとえば、次のコマンドライン ステートメントは、空のローカル フォルダーを c:\LocalDatabaseEmpty からエミュレーターにコピーします。

    ISETool.exe rs xd 77a80316-384d-40dc-a8c3-c4054676e85c "C:\LocalDatabaseEmpty"
    

    GUID 値は、アプリ マニフェエスト ファイルに含まれているアプリの Product ID に対応しています。アプリの Product ID は、この例で使用されている ID とは異なる場合があります。

    次のイメージは、LocalDatabaseEmpty フォルダーを復元することによってクリーン インストールをシミュレートしたバージョン 3 のアプリがどのようになるかを示します。

    AP_Con_LocalDatabaseUpdate_Empty

    これで、ローカル データベース更新のチュートリアルが終わりました。

表示: