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対応ですので、まずはサンプルをダウンロードして何が書かれているか確認してはいかがでしょうか。
リンク
コメント