SQLiteにアクセスするコードの例
実際にSQLiteにアクセスするコードの例をいくつか紹介しておきましょう。とはいうものの、普通にEntity Framework Coreを使っているだけのコードです。お好みであれば、ADO.NETでも書けます(ArticleDatabase.csの末尾を参照)。コードの全体は、SQLiteSampleプロジェクトをご覧ください。
データクラス
このアプリで扱っているデータを次のコードに示します。ここで、ArticleIdプロパティは、Entity Framework Coreのルールによって主キーになります。
public class Article
{
public int ArticleId { get; set; } // 主キー
public string Title { get; set; }
public string Url { get; set; }
}
データを追加する
データクラスのインスタンスを作り、それに主キー以外の値をセットしてから、Entity Framework CoreのAddメソッドに渡します。主キーの値は自動採番されます。Entity Framework CoreのSaveChangesAsyncメソッドを呼び出すと、データベースに反映されます。Addメソッドの返値のEntityプロパティに、実際に挿入されたデータオブジェクトが返ってきます(次のコード)。なお、SQLiteでは事前に主キーの値もセットできますが、その場合は既存データと衝突する可能性が出てきます。
async Task<Article> InsertDataAsync(Article article)
{
// 新規データを追加(自動採番)
using (var context = new ArticleContext())
{
var newEntry = context.Articles.Add(new Article
{
Title = article.Title,
Url = article.Url,
});
await context.SaveChangesAsync(CancellationToken.None);
return newEntry.Entity; // 自動採番されたArticleIdがセットされたデータ
}
}
データをすべて取得する
データの全件を取得するには、Entity Framework CoreのDbContextのArticlesプロパティから取り出して、メモリー上のコレクションに移しかえればよいです(次のコード)。絞り込みたいときは、Articlesプロパティに対してLINQを使います(次の更新する例を参照)。ただし、Articlesプロパティそのものをローカル変数などにキャッシュしておいても、using句を抜けると無効になってしまいますので注意してください。
public static ObservableCollection<Article> ArticlesList { get; private set; }
public static async Task<ObservableCollection<Article>> LoadAsync()
{
using (var context = new ArticleContext())
{
ArticlesList
= new ObservableCollection<Article>(await context.Articles.ToListAsync());
return ArticlesList;
}
}
データを更新する
更新対象のデータをデータベースから取得してきて、そこに変更を加えたら、Entity Framework CoreのSaveChangesAsyncメソッドを呼び出すだけです(次のコード)。このサンプルアプリでは同時実行制御を考慮していません。
async Task<Article> UpdateDataAsync(Article original, Article newData)
{
// 既存データの更新
using (var context = new ArticleContext())
{
// データベースから更新対象のデータを取ってくる
var targetItem
= await context.Articles.SingleAsync(m => m.ArticleId == original.ArticleId);
// 更新対象のデータを書き換え
targetItem.Title = newData.Title;
targetItem.Url = newData.Url;
// データベースに反映
await context.SaveChangesAsync(CancellationToken.None);
return targetItem;
}
}
この記事は参考になりましたか?
- UWPアプリ開発の最前線連載記事一覧
-
- SQLiteデータベースがWebアプリでも使える! ~Uno Platformクロスプラッ...
- UWPアプリを書けばiOS/Android/Webでも動く!? ~Uno Platform...
- Windows電卓の中はどうなっているのだろう?(後編) ~オープンソースのコードを改造し...
- この記事の著者
-
biac(ばいあっく)
HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
