teratailで3日かけて問答して回答し、サンプルコードまで書いたのでせっかくだからこっちでも共有しようかと。
例えば、アプリケーションで利用する大量のマスターデータを配布時にアプリケーションに添付して配布したい、みたいな時に使えます。
ただ、マスターの更新=アプリの更新になるの為、ケースによっては利用者に鬱陶しい思いをさせる可能性があります。
ネットワークからのダウンロードと組み合わせるとか、Azureのオフライン同期みたいのを使うとか、それらを組み合わせるとか検討が必要です。
用法容量を守ってご利用ください。
さて、実現するために幾つかの技術を組み合わせると比較的簡単に利用可能です。
- PCLプロジェクトにファイルを埋め込んで取得する方法
Working with Files - Xamarin - PCLからファイルシステムにワンソースでアクセスする方法
Plugins for Xamarinを使いこなすには?(ファイルシステム編) - Build Insider - PCLからSQLiteを利用するためのライブラリ選定について
Xamarin.FormsでSQLiteライブラリ何つかったらいいの?の自分的検討結果 - nuits.jp blog
具体的なコードは以下に公開しています。
せっかちな人はXFEmbeddSQLiteFile.slnを開いてApp.csクラスあたりを見てください。
SQLiteのDBファイルを「埋め込みリソース」としてプロジェクトへ登録する
とりあえず、何らかの方法でSQLiteのDBファイルを作成します。
作成したら、対象のファイルをPCLプロジェクトへ登録し、プロパティの「ビルドアクション」を「埋め込みリソース」へ変更しましょう。
プロジェクトに必要なパッケージを追加する
今回は標準のXamarin.Formsに加えて以下を利用します。
- PCLStorage
https://www.nuget.org/packages/PCLStorage/ - SQLite-net PCL
https://www.nuget.org/packages/sqlite-net-pcl/
コードを書こう!
以下のようなコードになります。
必要なコメントはコードに埋め込んでありますが、概要だけ説明しておきます。
- アプケーションの起動時にSQLiteファイルを保管して運用するパスを調べます
- ファイルが存在しなかったら初回起動と判断し空ファイルを作成します
- 作成した空ファイルに対して、埋め込んだリソースファイルの内容をコピーします
- あとは、初回も2回目以降も同じで利用するのみです
分かってしまえば簡単なものですね。
Use embedded sqlite database file in Xamarin.Forms
以上です。
それではまた!