c#からLiteDBのレコードを更新・削除する方法

LiteDBはポータブルなNoSQLデータベースです。

.Net Framework 用にライブラリが用意されており、c#などから簡単に使用することができます。

この記事では、c#を使用してLiteDBのレコードを更新する方法を紹介します。

0. Nugetパッケージの適用

LiteDBのNugetパッケージを適用します。

LiteDB 5.0.21
LiteDB - A lightweight embedded .NET NoSQL document store in a single datafileSigned by signpath.io from repository ' commit '391cc9318c5be6e56cb71b3ce14b1ed9cb...
dotnet add package LiteDB --version 5.0.9

1. サンプルのデータ構造

この記事では、以下のデータ項目をもったレコードを対象とします。

idをユニークキーとしています。

public class Data {
    public int id {get; set;}
    public int TaskGroupUID {get; set;}
    public string TaskGroupName {get; set;}
}

2. テーブル名称

テーブル名称は、同一クラス内に定義しておきます。

public static string tableName = TaskGroup;

3. 更新処理

以下のコードで更新することができます。

public static void Update(int id, Data updateData)
{

    using (LiteDatabase litedb = new LiteDatabase(DataModel.DataBase.litedbFilePath))
    {
        var col = litedb.GetCollection<Data>(tableName);
        var record = col.FindOne(x => x.id == id);

        record.TaskGroupUID = updateData.TaskGroupUID;
        record.TaskGroupName = updateData.TaskGroupName;

        col.Update(record);

    }

}

この関数では、以下の引数を持ちます。

引数名称 属性 意味
id int ユニークキーです。更新対象のレコードを特定するのに使用します
updateData Dataクラス 更新情報を格納します

idで特定した1レコードを、updateDataの情報で更新する処理になります。

4. 削除処理

削除するには、以下のようになります。

public static void Delete(int id)
{
    using (LiteDatabase litedb = new LiteDatabase(DataModel.DataBase.litedbFilePath))
    {
        var col = litedb.GetCollection<Data>(tableName);
        var record = col.FindOne(x => x.id == id);

        col.Delete(id);
    }
}

これも更新処理と同様に、idで特定した1レコードをDeleteメソッドで削除する処理になります。

5. ソースコードの全体像

この記事で使用したクラスファイルの全体像を以下に記載します。

using System;
using LiteDB;
using System.Collections.Generic;

namespace consoleapp.DataModel
{
    public class TaskGroup
    {

        // レコード定義
        public class Data {
            public int id {get; set;}
            public int TaskGroupUID {get; set;}
            public string TaskGroupName {get; set;}
        }

        // NoSQLテーブル名称
        public static string tableName = TaskGroup;

        // レコード追加処理
        public static void Add(Data data)
        {

            using (LiteDatabase litedb = new LiteDatabase(DataModel.DataBase.litedbFilePath))
            {
                var col = litedb.GetCollection<Data>(tableName);

                Data taskGroupData = new Data();
                taskGroupData.TaskGroupUID = data.TaskGroupUID;
                taskGroupData.TaskGroupName = data.TaskGroupName;

                col.Insert(taskGroupData);
            }

        }

        //全件取得
        public static List<Data> GetAllData()
        {
            using(LiteDatabase litedb = new LiteDatabase(DataModel.DataBase.litedbFilePath))
            {
                var col = litedb.GetCollection<TaskGroup.Data>(TaskGroup.tableName);
                var result = col.Query()
                    .ToList();
                return result;
            }
        }

        // 1レコード取得
        public static Data GetOneRecord(int id)
        {
            using (LiteDatabase litedb = new LiteDatabase(DataModel.DataBase.litedbFilePath))
            {
                var col = litedb.GetCollection<Data>(tableName);
                var record = col.FindOne(x => x.id == id);

                return record;
            }
        }

        //1レコード更新
        public static void Update(int id, Data updateData)
        {

            using (LiteDatabase litedb = new LiteDatabase(DataModel.DataBase.litedbFilePath))
            {
                var col = litedb.GetCollection<Data>(tableName);
                var record = col.FindOne(x => x.id == id);

                record.TaskGroupUID = updateData.TaskGroupUID;
                record.TaskGroupName = updateData.TaskGroupName;

                col.Update(record);

            }

        }

        //1レコード削除
        public static void Delete(int id)
        {
            using (LiteDatabase litedb = new LiteDatabase(DataModel.DataBase.litedbFilePath))
            {
                var col = litedb.GetCollection<Data>(tableName);
                var record = col.FindOne(x => x.id == id);

                col.Delete(id);
            }
        }

    }
}

おすすめ本 c#コードレシピ集

c#コードレシピ集は、「文字列を大文字あるいは小文字に変換したい」や「Taskをキャンセルしたい」など逆引き的にコードの書き方を調べられるレシピ集です。

2021年8月に発売された本で、全部で385個のレシピが収録されています。

ジャンルは日付処理やLINQ、並列処理と非同期処理など幅広く記載されています。

Kindle対応ですので、まずはサンプルをダウンロードして何が書かれているか確認してはいかがでしょうか。

コメント

タイトルとURLをコピーしました