当前位置: 首页 > article >正文

C# LiteDB 使用教程

一、引言

在软件开发中,数据存储和管理是至关重要的一环。对于小型项目或者对性能和便捷性有较高要求的场景,传统的大型数据库可能显得过于笨重。而 LiteDB 作为一款轻量级的嵌入式 NoSQL 数据库,为开发者提供了一个简洁、高效的解决方案。它完全由 C# 编写,与 .NET 生态系统天然契合,无需额外的服务器进程,非常适合用于桌面应用、移动应用以及物联网设备等。

二、安装 LiteDB

使用 NuGet 包管理器(Visual Studio)

如果你使用的是 Visual Studio 进行开发,可以通过 NuGet 包管理器轻松安装 LiteDB。具体步骤如下:

  1. 右键单击你的项目,选择 “管理 NuGet 程序包”。
  2. 在打开的 NuGet 包管理器窗口中,切换到 “浏览” 选项卡。
  3. 在搜索框中输入 “LiteDB”。
  4. 从搜索结果中选择 “LiteDB”,然后点击 “安装” 按钮。

三、创建和打开数据库

在 LiteDB 中,数据库以文件的形式存在,通常扩展名为 .db。下面是一个简单的示例,展示如何创建或打开一个数据库:

using LiteDB;

class Program
{
    static void Main()
    {
        // 创建或打开一个名为 mydatabase.db 的数据库
        using (var db = new LiteDatabase("mydatabase.db"))
        {
            // 在这里进行数据库操作
        }
    }
}

在上述代码中,LiteDatabase 类的构造函数接受一个数据库文件的路径作为参数。如果指定的文件不存在,LiteDB 会自动创建一个新的数据库文件;如果文件已经存在,则会打开该数据库。

四、数据建模

在 LiteDB 中,数据以文档的形式存储,每个文档可以看作是一个键值对的集合。通常,我们会使用 C# 类来定义数据模型。以下是一个简单的数据模型示例:

public class Person
{
    [BsonId]
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

在这个示例中,Person 类表示一个人的信息,包含 IdName 和 Age 三个属性。[BsonId] 属性用于标记 Id 作为文档的主键,确保每个文档的唯一性。

五、基本的 CRUD 操作

插入数据

插入数据是将新的文档添加到数据库中的操作。以下是一个插入 Person 对象的示例:

using LiteDB;
using System;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase("mydatabase.db"))
        {
            // 获取名为 "persons" 的集合
            var persons = db.GetCollection<Person>("persons");

            // 创建一个新的 Person 对象
            var person = new Person
            {
                Name = "John Doe",
                Age = 30
            };

            // 插入 Person 对象到集合中
            persons.Insert(person);

            Console.WriteLine("Person inserted successfully.");
        }
    }
}

在上述代码中,GetCollection<Person>("persons") 方法用于获取名为 persons 的集合。Insert 方法将 Person 对象插入到集合中。

查询数据

查询数据是从数据库中获取符合特定条件的文档的操作。以下是几种常见的查询方式:

using LiteDB;
using System;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase("mydatabase.db"))
        {
            var persons = db.GetCollection<Person>("persons");

            // 根据主键 查询单个数据
            var person1 = persons.FindById(1);
            if (person1 != null)
            {
                Console.WriteLine($"Name: {person1.Name}, Age: {person1.Age}");
            }
            else
            {
                Console.WriteLine("Person1 not found.");
            }

            //根据名字 查询单个数据
            var person2 = persons.FindOne(p=> p.Name == "John Doe");
            if (person2 != null)
            {
                Console.WriteLine($"Name: {person2.Name}, Age: {person2.Age}");
            }
            else
            {
                Console.WriteLine("Person2 not found.");
            }

            // 查询年龄大于 25 岁的所有人员 多个数据
            var result = persons.Find(p => p.Age > 25);

            foreach (var person in result)
            {
                Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
            }


        }
    }
}

更新数据

更新数据是修改数据库中已有文档的操作。以下是一个更新 Person 对象信息的示例:

using LiteDB;
using System;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase("mydatabase.db"))
        {
            var persons = db.GetCollection<Person>("persons");

            // 根据主键查询要更新的文档
            var person = persons.FindById(1);

            if (person != null)
            {
                // 更新人员信息
                person.Age = 31;
                // 更新文档到集合中
                persons.Update(person);
                Console.WriteLine("Person updated successfully.");
            }
            else
            {
                Console.WriteLine("Person not found.");
            }
        }
    }
}

删除数据

删除数据是从数据库中移除符合特定条件的文档的操作。以下是一个删除 Person 对象的示例:

using LiteDB;
using System;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase("mydatabase.db"))
        {
            var persons = db.GetCollection<Person>("persons");

            // 根据主键删除单个文档
            var result = persons.Delete(1);

            if (result)
            {
                Console.WriteLine("Person deleted successfully.");
            }
            else
            {
                Console.WriteLine("Person not found.");
            }

            // 根据名字 删除单个
            var deleteResult = persons.Delete(w => w.Name == "John Doe");

            if (deleteResult)
            {
                Console.WriteLine("Person deleted successfully.");
            }
            else
            {
                Console.WriteLine("Person not found.");
            }


        }
    }
}

六、索引的使用

索引可以显著提高查询性能,尤其是在处理大量数据时。在 LiteDB 中,可以为集合中的某个字段创建索引。以下是一个为 Person 集合的 Name 字段创建索引的示例:

using LiteDB;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase("mydatabase.db"))
        {
            var persons = db.GetCollection<Person>("persons");

            // 为 Name 字段创建唯一索引
            persons.EnsureIndex(x => x.Name, true);

            // 现在查询 Name 字段时会更快
            var result = persons.Find(p => p.Name == "John Doe");
        }
    }
}

在上述代码中,EnsureIndex 方法用于创建索引。第一个参数指定要创建索引的字段,第二个参数表示是否为唯一索引。

七、事务处理

事务是一组数据库操作,这些操作要么全部成功,要么全部失败。在 LiteDB 中,可以使用事务来确保数据的一致性。以下是一个简单的事务处理示例:

using LiteDB;
using System;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase("mydatabase.db"))
        {
            var persons = db.GetCollection<Person>("persons");

            // 开始一个事务
            using (var trans = db.BeginTrans())
            {
                try
                {
                    // 插入一个新的 Person 对象
                    var person = new Person
                    {
                        Name = "Jane Smith",
                        Age = 25
                    };
                    persons.Insert(person);

                    // 更新另一个 Person 对象的信息
                    var updatePerson = persons.FindById(1);
                    if (updatePerson != null)
                    {
                        updatePerson.Age = 32;
                        persons.Update(updatePerson);
                    }

                    // 提交事务
                    trans.Commit();
                    Console.WriteLine("Transaction committed successfully.");
                }
                catch (Exception ex)
                {
                    // 回滚事务
                    trans.Rollback();
                    Console.WriteLine($"Transaction rolled back: {ex.Message}");
                }
            }
        }
    }
}

在上述代码中,BeginTrans 方法用于开始一个事务,Commit 方法用于提交事务,Rollback 方法用于回滚事务。

八、总结

通过本教程,你已经了解了 LiteDB 的基本使用方法,包括安装、创建数据库、数据建模、CRUD 操作、索引的使用和事务处理等。LiteDB 以其轻量级、嵌入式和易用性的特点,为开发者提供了一个高效的数据存储解决方案。在实际项目中,你可以根据具体需求进一步探索 LiteDB 的高级功能,如数据加密、文件存储等。希望本教程能帮助你更好地使用 LiteDB 进行数据管理。

附件测试源码及数据库可视化软件:

我使用的liteDB版本为V 5.0.15版本,对应的图形可视化软件版V 5.0.15。

源码链接: https://pan.baidu.com/s/1XGseqtzeBJ7OzKwl1KJYHQ?pwd=wi59 提取码: wi59 

数据库可视化软件链接: https://pan.baidu.com/s/1Qs4jnsASE8U7Syq0oM40wg?pwd=y8ee 提取码: y8ee 


http://www.kler.cn/a/536961.html

相关文章:

  • springboot配置https
  • git push解决 error src refspec master does not match anyerror
  • 2024~2025学年佛山市普通高中教学质量检测(一)【高三数学】
  • 【医院绩效管理专题】2.绩效管理:医院发展的核心驱动力
  • 掌握API和控制点(从Java到JNI接口)_37 JNI开发与NDK 05
  • [高等数学]曲率
  • Qt实现简易音乐播放器
  • 脚手架开发【实战教程】prompts + fs-extra
  • MySQL视图索引操作
  • 【Linux】Ubuntu Linux 系统 ——Android开发环境
  • linux进程通讯-信号处理介绍
  • [开源/教程]使用Ollama+ESP32实现本地对话助手(可接入deepseek等模型)
  • 基于微信平台的报刊订阅小程序的设计与实现ssm+论文源码调试讲解
  • 新注册的域名无法访问,是怎么回事?
  • “AI隐患识别系统,安全多了道“智能护盾”
  • 鸿蒙UI(ArkUI-方舟UI框架)- 设置组件导航和页面路由
  • 青少年编程与数学 02-008 Pyhon语言编程基础 24课题、正则表达式
  • MES系统对于中小型制造企业有什么价值?
  • verilog练习:8bit移位寄存器
  • 防火墙与Squid代理服务器
  • FastReport 加载Load(Stream) 模板内包含换行符不能展示
  • 【网络】应用层协议http
  • 避免样式冲突:掌握CSS选择器优先级与层叠规则的终极指南
  • Itext pdf reader解析
  • mysql的语句备份详解
  • 11.享元模式 (Flyweight)