LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

使用 C# 和 LiteDB 嵌入式NoSQL 数据库

admin
2024年8月13日 21:7 本文热度 703

LiteDB 是一个轻量、快速、嵌入式的 NoSQL 数据库。它不需要服务器,适用于桌面、移动应用以及小型 Web API 项目,本人在一些小项目中比较喜欢使用。本文将介绍 LiteDB 的主要特点以及如何在 C# 中使用 LiteDB,通过完整的例子展示常见的数据库操作。

LiteDB 主要特点

  • 无需服务器:LiteDB 运行于单一 DLL 中,不需要复杂的服务器配置。

  • 轻量级:数据库文件小巧,适用于资源受限的环境。

  • 嵌入式:LiteDB 直接嵌入到应用程序中。

  • NoSQL:基于 BSON(二进制 JSON 序列化协议)存储数据。

  • 简单易用:通过简单的 API 实现 CRUD 操作。

  • 支持 LINQ:方便的数据查询与操作支持。


安装 LiteDB

首先,通过 NuGet 包管理器安装 LiteDB。可以在 Visual Studio 的包管理控制台中输入以下命令:

Install-Package LiteDB


或者在 .csproj 文件中添加以下包引用:

<PackageReference Include="LiteDB" Version="5.0.9" />

快速开始

我们将通过一个简单的 C# 控制台应用展示如何使用 LiteDB 实现基本的 CRUD(创建、读取、更新、删除)操作。

1. 创建实体类

首先,我们需要定义一个实体类。例如,我们要在数据库中存储用户信息,定义如下:

public class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }}

2. 插入数据

插入数据是基本的数据库操作,我们首先创建 LiteDatabase 实例,然后获取集合并插入数据。

private void btnInsert_Click(object sender, EventArgs e){    // 连接数据库(若文件不存在会自动创建)    using (var db = new LiteDatabase(@"MyData.db"))    {        // 获取 User 集合(若不存在会自动创建)        var users = db.GetCollection<User>("users");
       // 创建新的 User 对象并插入集合        var user = new User { Name = "John Doe", Email = "johndoe@example.com" };        users.Insert(user);
       Console.WriteLine("User inserted with Id: " + user.Id);    }}

3. 查询数据

LiteDB 提供了简单的查询接口,可以使用 LINQ 查询或通过 BsonExpression 指定查询条件。

private void btnSearch_Click(object sender, EventArgs e){    // 连接数据库    using (var db = new LiteDatabase(@"MyData.db"))    {        var users = db.GetCollection<User>("users");
       // 通过 Id 查询单个用户        var user = users.FindById(1);        if (user != null)        {            Console.WriteLine($"User found: {user.Name}, {user.Email}");        }
       // 使用 LINQ 查询所有用户        var allUsers = users.FindAll().ToList();        foreach (var u in allUsers)        {            MessageBox.Show($"User: {u.Name}, {u.Email}");        }    }}

4. 更新数据

可以根据 Id 或其他条件查找并更新现有的记录。

private void btnUpdate_Click(object sender, EventArgs e){    // 连接数据库    using (var db = new LiteDatabase(@"MyData.db"))    {        var users = db.GetCollection<User>("users");
       // 通过 Id 查找用户并更新        var user = users.FindById(1);        if (user != null)        {            user.Email = "john.doe@newdomain.com";            users.Update(user);
           MessageBox.Show("User updated");        }    }}

5. 删除数据

可以根据 Id 或其他条件删除记录。

private void btnDelete_Click(object sender, EventArgs e){    // 连接数据库    using (var db = new LiteDatabase(@"MyData.db"))    {        var users = db.GetCollection<User>("users");
       // 通过 Id 删除用户        bool success = users.Delete(1);        if (success)        {            MessageBox.Show("User deleted");        }    }}

定义 IDataRepository 接口

首先,我们定义一个通用的 IDataRepository 接口。这使我们能够以更抽象的方式处理数据存储库,并方便以后进行扩展。

public interface IDataRepository<T>{    void Insert(T entity);    T GetById(int id);    IEnumerable<T> GetAll();    void Update(T entity);    bool Delete(int id);}

实现 UserRepository 类

接下来,我们实现一个 UserRepository 类来处理 User 实体的数据库操作。UserRepository 类继承 IDataRepository<User> 接口。

using LiteDB;using System;using System.Collections.Generic;
public class UserRepository : IDataRepository<User>, IDisposable{    private readonly LiteDatabase _database;    private readonly ILiteCollection<User> _usersCollection;
   public UserRepository(string databasePath){        _database = new LiteDatabase(databasePath);        _usersCollection = _database.GetCollection<User>("users");    }
   public void Insert(User entity){        _usersCollection.Insert(entity);    }
   public User GetById(int id){        return _usersCollection.FindById(id);    }
   public IEnumerable<User> GetAll()    {        return _usersCollection.FindAll();    }
   public void Update(User entity){        _usersCollection.Update(entity);    }
   public bool Delete(int id){        return _usersCollection.Delete(id);    }
   public void Dispose(){        _database?.Dispose();    }}

使用 UserRepository 类

有了数据仓储类之后,我们可以在应用程序中使用 UserRepository 来进行User实体的数据库操作。

private void btnRepository_Click(object sender, EventArgs e){    // 数据库文件路径    string databasePath = @"MyData.db";
   using (var userRepository = new UserRepository(databasePath))    {        // 插入数据        var newUser = new User { Name = "Jane Doe", Email = "janedoe@example.com" };        userRepository.Insert(newUser);        MessageBox.Show($"User inserted with Id: {newUser.Id}");
       // 查询数据        var user = userRepository.GetById(newUser.Id);        if (user != null)        {            MessageBox.Show($"User found: {user.Name}, {user.Email}");        }
       // 更新数据        user.Email = "jane.doe@newdomain.com";        userRepository.Update(user);        MessageBox.Show("User updated");
       // 列出所有用户        var allUsers = userRepository.GetAll();        foreach (var u in allUsers)        {            MessageBox.Show($"User: {u.Name}, {u.Email}");        }
       // 删除数据        if (userRepository.Delete(user.Id))        {            MessageBox.Show("User deleted");        }    }}

结论

LiteDB 是一个非常实用且易于使用的嵌入式 NoSQL 数据库,适用于小型项目和快速开发。在 C# 中使用 LiteDB 非常简单且高效,通过简单的 API,我们可以方便地进行数据存储和查询。本文介绍了 LiteDB 的基本特点,并通过完整的例子展示了如何进行 CRUD 操作,帮助开发者快速上手。


该文章在 2024/8/19 18:43:32 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved