iOS アプリでのデータの使用

DataAccess_Adv サンプルは、ユーザーによる入力と CRUD (作成、読み取り、更新、削除) データベース機能を可能にする、動作するアプリケーションを示します。 このアプリケーションは、一覧とデータ入力フォームの 2 つのスクリーンで構成されます。 すべてのデータ アクセス コードは、変更せずに iOS と Android 内で再利用できます。

いくつかのデータを追加すると、このアプリケーションのスクリーンは iOS 上で次のようになります。

iOS sample list

iOS sample detail

iOS プロジェクトを次に示します。このセクションに示すコードは、[Orm] ディレクトリ内に含まれています。

iOS project tree

iOS 内の ViewControllers のネイティブ UI コードは、このドキュメントの範囲外です。 UI コントロールについて詳しくは、「iOS でのテーブルとセルの操作」ガイドを参照してください。

読み込み

このサンプルの中には、いくつかの読み取り操作があります。

  • 一覧の読み取り
  • 個別のレコードの読み取り

StockDatabase クラス内の 2 つのメソッドは次のとおりです。

public IEnumerable<Stock> GetStocks ()
{
    lock (locker) {
        return (from i in Table<Stock> () select i).ToList ();
    }
}
public Stock GetStock (int id)
{
    lock (locker) {
        return Table<Stock>().FirstOrDefault(x => x.Id == id);
    }
}

iOS では、データは UITableView として、異なる方法でレンダリングされます。

作成と更新

アプリケーション コードを簡略化するために、PrimaryKey が設定されているかどうかに応じて Insert または Update を実行する、1 つの保存メソッドが用意されています。 [PrimaryKey] 属性を使用して Id プロパティをマークしているため、コード内ではこれを設定しないでください。 このメソッドは、その値が以前に保存されたかどうかを (主キー プロパティをチェックして) 検出し、それに応じてオブジェクトを挿入または更新します。

public int SaveStock (Stock item)
{
    lock (locker) {
        if (item.Id != 0) {
            Update (item);
            return item.Id;
    } else {
            return Insert (item);
        }
    }
}

実際のアプリケーションでは、通常、何らかの検証が必要になります (必須フィールド、最小長、その他のビジネス ルールなど)。 優れたクロスプラットフォーム アプリケーションでは、共有コード内で可能な限り多くの検証ロジックを実装し、プラットフォームの機能に従って検証エラーを UI に戻して表示します。

削除

InsertUpdate メソッドとは異なり、Delete<T> メソッドは Stock オブジェクト全体ではなく、主キー値のみを受け取ることができます。 この例では、Stock オブジェクトがメソッドに渡されますが、Id プロパティのみが Delete<T> メソッドに渡されます。

public int DeleteStock(Stock stock)
{
    lock (locker) {
        return Delete<Stock> (stock.Id);
    }
}

事前に設定された SQLite データベース ファイルの使用

一部のアプリケーションには、既にデータが設定されたデータベースが付属しています。 モバイル アプリケーションでは、既存の SQLite データベース ファイルをアプリに同梱し、それにアクセスする前に書き込み可能なディレクトリにコピーすることで、これを簡単に実現できます。 SQLite は多くのプラットフォーム上で使用される標準のファイル形式であるため、SQLite データベース ファイルを作成するために使用できるツールは多数あります。

  • SQLite Manager Firefox 拡張機能 – Mac および Windows 上で動作し、iOS および Android と互換性のあるファイルを生成します。
  • コマンド ラインwww.sqlite.org/sqlite.html を参照してください。

アプリで配布するデータベース ファイルを作成する場合は、テーブルと列の名前がコードで想定されているものと一致するように注意してください。特に、名前が C# のクラスやプロパティ (または関連するカスタム属性) と一致することが想定される SQLite.NET を使用している場合。

iOS の場合は、アプリケーションの中に sqlite ファイルを含め、それがビルド アクション: コンテンツでマークされていることを確認します。 データ メソッドを呼び出す "前" に、コードを FinishedLaunching の中に配置してファイルを書き込み可能なディレクトリにコピーします。 次のコードは、data.sqlite という名前の既存のデータベースを (まだ存在しない場合に限り) コピーします。

// Copy the database across (if it doesn't exist)
var appdir = NSBundle.MainBundle.ResourcePath;
var seedFile = Path.Combine (appdir, "data.sqlite");
if (!File.Exists (Database.DatabaseFilePath))
{
  File.Copy (seedFile, Database.DatabaseFilePath);
}

この完了後に実行されるすべてのデータ アクセス コードは (ADO.NET でも、または SQLite.NET の使用でも)、事前に設定されたデータにアクセスできます。