SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

SQLiteデータベースがWebアプリでも使える!
~Uno Platformクロスプラットフォーム開発の可能性を探る

UWPアプリ開発の最前線 第16回

  • X ポスト
  • このエントリーをはてなブックマークに追加

SQLiteにアクセスするコードの例

 実際にSQLiteにアクセスするコードの例をいくつか紹介しておきましょう。とはいうものの、普通にEntity Framework Coreを使っているだけのコードです。お好みであれば、ADO.NETでも書けます(ArticleDatabase.csの末尾を参照)。コードの全体は、SQLiteSampleプロジェクトをご覧ください。

データクラス

 このアプリで扱っているデータを次のコードに示します。ここで、ArticleIdプロパティは、Entity Framework Coreのルールによって主キーになります。

データクラスArticle(Article.cs
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では事前に主キーの値もセットできますが、その場合は既存データと衝突する可能性が出てきます。

引数に与えたデータをテーブルに追加する(ArticleDatabase.cs
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句を抜けると無効になってしまいますので注意してください。

テーブルからデータを全て取得する(ArticleDatabase.csから抜粋)
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メソッドを呼び出すだけです(次のコード)。このサンプルアプリでは同時実行制御を考慮していません。

引数に与えたデータでデータベースを更新する(ArticleDatabase.cs
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;
  }
}

次のページ
Uno Platform 2.0(プレリリース版)のWebViewコントロール

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11840 2019/12/16 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング