暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

技术老小子 2024-07-23
3

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 操作,帮助开发者快速上手。

                    希望这篇文章能够为你在 C# 项目中使用 LiteDB 提供基础的参考和帮助!


                    文章转载自技术老小子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论