欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

輕量、高效、易用的嵌入式 NoSQL 數據庫 LiteDB 在 C# 中的基本使用教程

admin
2025年1月10日 14:33 本文熱度 77

在當今快速發展的軟件開發領域,開發者常常需要一個輕量、高效、易用的數據存儲解決方案。LiteDB 應運而生,為 .NET 開發者提供了一個簡單而強大的嵌入式 NoSQL 數據庫選擇。

本教程將帶你全面深入地探索 LiteDB 的使用,從基礎的數據庫連接和實體模型設計,到復雜的文檔增刪改查操作,再到事務處理、性能優化和異常處理,通過系統性的學習,你將全面掌握 LiteDB 在實際項目中的應用技巧和最佳實踐。

1. 準備工作

首先,確保通過 NuGet 安裝 LiteDB 包:

Install-Package LiteDB

2. 定義實體模型

// 用戶實體類
public class User
{

    // LiteDB 要求每個文檔都有一個 Id 屬性
    public int Id { get; set; }

    // 用戶基本信息
    public string Username { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }

    // 用戶角色信息
    public string[] Roles { get; set; }

    // 用戶詳細信息
    public UserProfile Profile { get; set; }
}
// 用戶詳細信息類
public class UserProfile
{

    public string Address { get; set; }
    public string PhoneNumber { get; set; }
}

3. 數據庫連接與基本操作

3.1 創建數據庫連接

using LiteDB;

public class UserRepository
{

    // 數據庫連接字符串
    private const string DATABASE_PATH = @"MyDatabase.db";

    // 創建數據庫連接
    private LiteDatabase CreateDatabaseConnection()
    
{
        // 創建 LiteDB 數據庫實例
        return new LiteDatabase(DATABASE_PATH);
    }
}

3.2 插入文檔

public void InsertUser(User user)
{
    // 使用 using 確保資源正確釋放
    using (var db = CreateDatabaseConnection())
    {
        // 獲取 Users 集合
        var users = db.GetCollection<User>("users");

        // 插入單個文檔
        users.Insert(user);

        // 插入多個文檔
        var multiUsers = new List<User> 
        {
            new User { Username = "張三", Email = "zhangsan@example.com", Age = 25 },
            new User { Username = "李四", Email = "lisi@example.com", Age = 30 }
        };
        users.InsertBulk(multiUsers);
    }
}

調用

internal class Program
{

    static void Main(string[] args)
    
{
        UserRepository userRepository = new UserRepository();
        userRepository.InsertUser(new User
        {
            Id = 1,
            Username = "John",
            Age = 25,
            Email = "john@example.com",
            Roles = new string[] { "admin""user" },
            Profile = new UserProfile { Address = "123 Main St", PhoneNumber = "555-555-5555" }
        });
    }
}

3.3 查詢文檔

// 根據 Id 查詢單個用戶
public User GetUserById(int userId)
{
    using (var db = CreateDatabaseConnection())
    {
        var users = db.GetCollection<User>("users");
        return users.FindById(userId);
    }
}

// 復雜條件查詢
public List<User> QueryUsers(int minAge, string role)
{
    using (var db = CreateDatabaseConnection())
    {
        var users = db.GetCollection<User>("users");

        // 使用 LiteDB 支持的查詢方式  
        return users.Query()
                    .Where(u =>
                        u.Age >= minAge &&
                        u.Roles != null &&
                        u.Roles.Contains(role)
                    )
                    .OrderBy(u => u.Username)
                    .Limit(100)
                    .ToList();
    }
}

// 模糊查詢
public List<User> SearchUsersByName(string keyword)
{
    using (var db = CreateDatabaseConnection())
    {
        var users = db.GetCollection<User>("users");
        return users.Query()
            .Where(u => u.Username.Contains(keyword))
            .ToList();
    }
}

調用

internal class Program
{

    static void Main(string[] args)
    
{
        UserRepository userRepository = new UserRepository();
        var user = userRepository.GetUserById(1);
        //Console輸入出user的信息
        Console.WriteLine(user.Username);
        Console.WriteLine(user.Age);
        Console.WriteLine(user.Email);
        foreach (var role in user.Roles)
        {
            Console.WriteLine(role);
        }
        Console.WriteLine(user.Profile.Address);
        Console.WriteLine(user.Profile.PhoneNumber);    
    }
}

注意:在Roles為空時的判斷

3.4 更新文檔

實例更新

public bool UpdateUser(User user)
{
    using (var db = CreateDatabaseConnection())
    {
        var users = db.GetCollection<User>("users");

        // 根據 Id 更新整個文檔
        var result = users.Update(user);

        return result;
    }
}

3.5 刪除文檔

public class UserRepository
{

    // 按 Id 刪除
    public void DeleteUserById(int userId)
    
{
        using (var db = CreateDatabaseConnection())
        {
            var users = db.GetCollection<User>("users");
            users.Delete(userId);
        }
    }

    // 按條件刪除
    public void DeleteUsersByCondition()
    
{
        using (var db = CreateDatabaseConnection())
        {
            var users = db.GetCollection<User>("users");

            // 刪除 30 歲以下的用戶
            users.DeleteMany(u => u.Age < 30);
        }
    }
}

4. 高級特性

4.1 事務支持

public void PerformTransactionalOperation()
{
    using (var db = CreateDatabaseConnection())
    {
        var transaction = db.BeginTrans();
        {
            try
            {
                var users = db.GetCollection<User>("users");

                // 執行多個操作  
                users.Insert(new User { Username = "新用戶" });
                users.Delete(100);  // 刪除特定用戶  

                // 如果沒有異常,提交事務  
                db.Commit();
            }
            catch (Exception ex)
            {
                // 發生異常時自動回滾  
                db.Rollback();
                throw;
            }
        }
    }
}

4.2 索引管理

public void ManageIndexes()
{
    using (var db = CreateDatabaseConnection())
    {
        var users = db.GetCollection<User>("users");

        // 為 Username 創建唯一索引
        users.EnsureIndex(u => u.Username, unique: true);

        // 為 Email 創建文本索引
        users.EnsureIndex(u => u.Email);
    }
}

5. 注意事項

  1. LiteDB 是嵌入式數據庫,適合小型應用

  2. 每個文檔必須有唯一 Id

  3. 支持索引以提高查詢性能

  4. 線程安全,但大量并發需謹慎

  5. 對常用查詢字段創建索引

6. 異常處理

文件和數據庫相關錯誤:

FILE_NOT_FOUND = 101,               // 文件未找到
DATABASE_SHUTDOWN = 102,             // 數據庫已關閉
INVALID_DATABASE = 103,              // 無效的數據庫
FILE_SIZE_EXCEEDED = 105,            // 文件大小超限
ALREADY_OPEN_DATAFILE = 124,         // 數據文件已打開
INVALID_DATAFILE_STATE = 999,        // 數據文件狀態無效

集合和索引相關錯誤:

COLLECTION_LIMIT_EXCEEDED = 106,     // 集合數量超限
INDEX_DROP_ID = 108,                 // 不能刪除ID索引
INDEX_DUPLICATE_KEY = 110,           // 索引鍵重復
INVALID_INDEX_KEY = 111,             // 無效的索引鍵
INDEX_NOT_FOUND = 112,               // 索引未找到
INDEX_NAME_LIMIT_EXCEEDED = 128,     // 索引名稱長度超限
INVALID_INDEX_NAME = 129,            // 無效的索引名稱
COLLECTION_NOT_FOUND = 133,          // 集合未找到
COLLECTION_ALREADY_EXIST = 134,      // 集合已存在
INDEX_ALREADY_EXIST = 135,           // 索引已存在

命名和操作相關錯誤:

INVALID_COLLECTION_NAME = 130,       // 無效的集合名稱
ALREADY_EXISTS_COLLECTION_NAME = 122,// 集合名稱已存在
INVALID_COMMAND = 121,               // 無效的命令
INVALID_UPDATE_FIELD = 136,          // 無效的更新字段

事務和引擎相關錯誤:

INVALID_TRANSACTION_STATE = 126,     // 事務狀態無效
TEMP_ENGINE_ALREADY_DEFINED = 131,   // 臨時引擎已定義
ENGINE_DISPOSED = 137,                // 引擎已釋放
LOCK_TIMEOUT = 120,                   // 鎖定超時

數據和類型相關錯誤:

INVALID_FORMAT = 200,                // 無效的格式
DOCUMENT_MAX_DEPTH = 201,            // 文檔最大深度超限
INVALID_CTOR = 202,                  // 無效的構造函數
UNEXPECTED_TOKEN = 203,              // 意外的標記
INVALID_DATA_TYPE = 204,             // 無效的數據類型
PROPERTY_NOT_MAPPED = 206,           // 屬性未映射
INVALID_TYPED_NAME = 207,            // 無效的類型名稱
PROPERTY_READ_WRITE = 209,           // 屬性讀寫錯誤
DATA_TYPE_NOT_ASSIGNABLE = 214,      // 數據類型不可分配

加密和安全相關錯誤:

INITIALSIZE_CRYPTO_NOT_SUPPORTED = 210,  // 初始大小加密不支持
INVALID_INITIALSIZE = 211,            // 無效的初始大小
INVALID_NULL_CHAR_STRING = 212,       // 無效的空字符串
NOT_ENCRYPTED = 216,                  // 未加密
INVALID_PASSWORD = 217,               // 無效的密碼
ILLEGAL_DESERIALIZATION_TYPE = 218,   // 非法反序列化類型

其他特殊錯誤:

INVALID_EXPRESSION_TYPE = 132,        // 無效的表達式類型
INVALID_FREE_SPACE_PAGE = 213,        // 無效的空閑空間頁
AVOID_USE_OF_PROCESS = 215,           // 避免使用進程

使用示例:

try 
{
    // 數據庫操作
}
catch (LiteException ex)
{
    switch (ex.ErrorCode)
    {
        case LiteErrorCode.COLLECTION_NOT_FOUND:
            Console.WriteLine("集合未找到,請檢查集合名稱");
            break;
        case LiteErrorCode.INDEX_DUPLICATE_KEY:
            Console.WriteLine("索引鍵重復,無法插入");
            break;
        // 其他錯誤處理
    }
}

結語

LiteDB 是一個輕量、簡單、功能強大的嵌入式 NoSQL 數據庫,非常適合中小型 .NET 應用。它提供了直觀的 API,支持復雜查詢,并且易于使用和集成。無論是桌面應用、移動應用還是小型 Web 服務,LiteDB 都是一個值得考慮的數據存儲解決方案。


該文章在 2025/1/10 14:33:33 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved