亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

在當(dāng)今快速發(fā)展的軟件開發(fā)領(lǐng)域,開發(fā)者常常需要一個(gè)輕量、高效、易用的數(shù)據(jù)存儲解決方案。LiteDB 應(yīng)運(yùn)而生,為 .NET 開發(fā)者提供了一個(gè)簡單而強(qiáng)大的嵌入式 NoSQL 數(shù)據(jù)庫選擇。

本教程將帶你全面深入地探索 LiteDB 的使用,從基礎(chǔ)的數(shù)據(jù)庫連接和實(shí)體模型設(shè)計(jì),到復(fù)雜的文檔增刪改查操作,再到事務(wù)處理、性能優(yōu)化和異常處理,通過系統(tǒng)性的學(xué)習(xí),你將全面掌握 LiteDB 在實(shí)際項(xiàng)目中的應(yīng)用技巧和最佳實(shí)踐。

1. 準(zhǔn)備工作

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

Install-Package LiteDB

2. 定義實(shí)體模型

// 用戶實(shí)體類
public class User
{

    // LiteDB 要求每個(gè)文檔都有一個(gè) 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; }

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

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

3. 數(shù)據(jù)庫連接與基本操作

3.1 創(chuàng)建數(shù)據(jù)庫連接

using LiteDB;

public class UserRepository
{

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

    // 創(chuàng)建數(shù)據(jù)庫連接
    private LiteDatabase CreateDatabaseConnection()
    
{
        // 創(chuàng)建 LiteDB 數(shù)據(jù)庫實(shí)例
        return new LiteDatabase(DATABASE_PATH);
    }
}

3.2 插入文檔

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

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

        // 插入多個(gè)文檔
        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);
    }
}

調(diào)用

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 查詢文檔

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

// 復(fù)雜條件查詢
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();
    }
}

調(diào)用

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為空時(shí)的判斷

3.4 更新文檔

實(shí)例更新

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

        // 根據(jù) Id 更新整個(gè)文檔
        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 事務(wù)支持

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

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

                // 如果沒有異常,提交事務(wù)  
                db.Commit();
            }
            catch (Exception ex)
            {
                // 發(fā)生異常時(shí)自動(dòng)回滾  
                db.Rollback();
                throw;
            }
        }
    }
}

4.2 索引管理

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

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

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

5. 注意事項(xiàng)

  1. LiteDB 是嵌入式數(shù)據(jù)庫,適合小型應(yīng)用

  2. 每個(gè)文檔必須有唯一 Id

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

  4. 線程安全,但大量并發(fā)需謹(jǐn)慎

  5. 對常用查詢字段創(chuàng)建索引

6. 異常處理

文件和數(shù)據(jù)庫相關(guān)錯(cuò)誤:

FILE_NOT_FOUND = 101,               // 文件未找到
DATABASE_SHUTDOWN = 102,             // 數(shù)據(jù)庫已關(guān)閉
INVALID_DATABASE = 103,              // 無效的數(shù)據(jù)庫
FILE_SIZE_EXCEEDED = 105,            // 文件大小超限
ALREADY_OPEN_DATAFILE = 124,         // 數(shù)據(jù)文件已打開
INVALID_DATAFILE_STATE = 999,        // 數(shù)據(jù)文件狀態(tài)無效

集合和索引相關(guān)錯(cuò)誤:

COLLECTION_LIMIT_EXCEEDED = 106,     // 集合數(shù)量超限
INDEX_DROP_ID = 108,                 // 不能刪除ID索引
INDEX_DUPLICATE_KEY = 110,           // 索引鍵重復(fù)
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,           // 索引已存在

命名和操作相關(guān)錯(cuò)誤:

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

事務(wù)和引擎相關(guān)錯(cuò)誤:

INVALID_TRANSACTION_STATE = 126,     // 事務(wù)狀態(tài)無效
TEMP_ENGINE_ALREADY_DEFINED = 131,   // 臨時(shí)引擎已定義
ENGINE_DISPOSED = 137,                // 引擎已釋放
LOCK_TIMEOUT = 120,                   // 鎖定超時(shí)

數(shù)據(jù)和類型相關(guān)錯(cuò)誤:

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

加密和安全相關(guān)錯(cuò)誤:

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

其他特殊錯(cuò)誤:

INVALID_EXPRESSION_TYPE = 132,        // 無效的表達(dá)式類型
INVALID_FREE_SPACE_PAGE = 213,        // 無效的空閑空間頁
AVOID_USE_OF_PROCESS = 215,           // 避免使用進(jìn)程

使用示例:

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

結(jié)語

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


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