.NET 帮助

LiteDB .NET(开发人员使用指南)

介绍

LiteDB 是一个简单、快速且轻量级的嵌入式 .NET 文档数据库。 LiteDB .NET 受到了 MongoDB 数据库的启发,其 API 与 MongoDB 官方 .NET API 非常相似。 LiteDB 是一种无服务器数据库,适合用于小型项目和移动应用程序。

本文将为您提供有关在项目中利用LiteDB功能的准确指导。 我们还介绍了使用由Iron Software制作的IronPDF,一个.NET库,用于生成和操作PDF,以及如何利用它将LiteDB数据库内容输出为PDF以便查看和共享。

LiteDB的主要特性

  1. 嵌入式数据库:无需单独的服务器。 LiteDB在您的应用程序进程中运行。

  2. 单个数据文件: 您可以将所有数据存储在一个文件数据库中,简化部署和备份。

  3. BSON 格式: 使用 BSON 格式进行存储,确保快速的读写操作。

  4. LINQ 支持:完全支持 LINQ 查询,使 .NET 开发人员感到直观。

  5. ACID 事务:通过支持 ACID 事务来确保数据完整性。

  6. 跨平台:适用于Windows、Linux和macOS。

在 .NET 项目中设置 LiteDB

在 Visual Studio 中打开项目。 接着,在解决方案资源管理器中,右键单击你的项目并选择“管理 NuGet 包”。搜索 LiteDB 并安装它,使这个数据库解决方案轻松整合到你的项目中。

或者,您可以使用包管理器控制台进行安装。 在 NuGet 包管理器控制台中安装 LiteDB,请使用以下命令:

Install-Package LiteDB
Install-Package LiteDB
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

开始使用LiteDB

安装后,您可以在应用程序中开始使用LiteDB。 让我们通过一些例子来说明其用法。

示例 1:创建并插入数据

首先,让我们创建一个简单的Product类来表示我们的数据:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

接下来,我们将创建一个数据库并插入一些产品:

using LiteDB;
using System;
class Program
{
   static void Main()
{
    using (var db = new LiteDatabase(@"MyData.db"))
    {
        var products = db.GetCollection<Product>("products");
        var productList = new[]
        {
            new Product { Id = 201, Name = "Apple", Price = 0.99m },
            new Product { Id = 202, Name = "Banana", Price = 0.59m },
            new Product { Id = 203, Name = "Orange", Price = 0.79m },
            new Product { Id = 204, Name = "Grape", Price = 2.99m },
            new Product { Id = 205, Name = "Watermelon", Price = 4.99m }
        };
        foreach (var product in productList)
        {
            products.Insert(product);
        }
        Console.WriteLine("Product inserted successfully.");
    }
}
}
using LiteDB;
using System;
class Program
{
   static void Main()
{
    using (var db = new LiteDatabase(@"MyData.db"))
    {
        var products = db.GetCollection<Product>("products");
        var productList = new[]
        {
            new Product { Id = 201, Name = "Apple", Price = 0.99m },
            new Product { Id = 202, Name = "Banana", Price = 0.59m },
            new Product { Id = 203, Name = "Orange", Price = 0.79m },
            new Product { Id = 204, Name = "Grape", Price = 2.99m },
            new Product { Id = 205, Name = "Watermelon", Price = 4.99m }
        };
        foreach (var product in productList)
        {
            products.Insert(product);
        }
        Console.WriteLine("Product inserted successfully.");
    }
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

代码描述

代码初始化与名为"MyData.db"的LiteDB数据库的连接,并检索名为"products"的集合。 然后创建一个包含各种属性的Product对象数组,比如ID、名称和价格。 数组中的每个产品都被插入数据库内的“products”集合。 在成功插入所有产品后,它会在控制台上打印确认消息。

输出为

LiteDB .NET(开发者的工作原理):图1 - 来自前面代码的控制台输出

示例:简化用户数据管理

假设您正在开发一个管理用户账户的移动应用程序。 每个用户都有一个包含姓名、电子邮件地址、偏好(存储为 JSON 对象)及收藏项目列表的个人资料。 以下是 LiteDb.NET 如何简化您的数据存储:

该代码定义了一个User类用于表示用户数据,以及一个UserManager类用于在LiteDb.NET数据库中管理用户操作。

using LiteDB;
public class User
{
    [BsonId]
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public Dictionary<string, string> Preferences { get; set; }
    public List<string> FavoriteItems { get; set; }
} 
public class UserManager
{
    private readonly LiteDatabase db;
    public UserManager(string connectionString)
    {
       db = new LiteDatabase(connectionString);
    }
    public void SaveUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Insert(user);
    }
    public User GetUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        return collection.FindById(userId);
    }
    public void UpdateUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Update(user);
    }
    public void DeleteUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        collection.Delete(userId);
    }
}
using LiteDB;
public class User
{
    [BsonId]
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public Dictionary<string, string> Preferences { get; set; }
    public List<string> FavoriteItems { get; set; }
} 
public class UserManager
{
    private readonly LiteDatabase db;
    public UserManager(string connectionString)
    {
       db = new LiteDatabase(connectionString);
    }
    public void SaveUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Insert(user);
    }
    public User GetUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        return collection.FindById(userId);
    }
    public void UpdateUser(User user)
    {
        var collection = db.GetCollection<User>("users");
        collection.Update(user);
    }
    public void DeleteUser(string userId)
    {
        var collection = db.GetCollection<User>("users");
        collection.Delete(userId);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此实现有效利用LiteDb.NET的功能进行用户数据管理。 User类用于存储用户信息,而UserManager类提供了在数据库中保存、检索、更新和删除用户的方法。

LiteDB,嵌入式 NoSQL 数据库用于 .NET

LiteDB 非常适合无需用户并发的小型到中型应用程序。 例如,它非常适合用于个人控制台应用程序,在那里您希望简单而快速地存储数据。 完全用C#开发,它轻量级,占用空间不到450KB,而且不依赖外部依赖项。

还有一些要点,列在他们的GitHub 页面

  1. 无服务器 NoSQL 文档存储

  2. 简单的 API,类似于 MongoDB

  3. 线程安全

  4. LiteDB完全使用C#编写,与.NET 4.5、NETStandard 1.3/2.0兼容,打包成一个占用空间不足450KB的单个DLL文件。

  5. ACID 全事务支持

  6. 写入失败后的数据恢复(WAL日志文件)

  7. 使用 DES(AES)加密法对数据文件进行加密

  8. 您可以使用属性或LiteDB提供的流畅映射器API轻松地将您的普通旧CLR对象(POCO)类映射到BsonDocument。

  9. 存储文件和流数据(如MongoDB中的GridFS)

    1. 单一数据文件存储(像SQLite)
  10. 为快速搜索建立索引文档字段

    1. 对查询的LINQ支持
  11. 类似 SQL 的命令用于访问/转换数据

    1. LiteDB Studio – 适用于数据访问的良好用户界面
  12. 开源且免费对所有人开放——包括商业用途

IronPDF简介:一个C# PDF库

LiteDB .NET(开发者如何使用):图2 - IronPDF 网页

IronPDF是一个卓越的C# PDF库,可在.NET项目中实现PDF的无缝创建编辑操作。 它为像HTML 转 PDF转换、动态 PDF 生成和数据提取等任务提供了全面的 API。 利用.NET Chromium引擎,确保准确地将HTML渲染为PDF文件,以满足.NET Core、.NET Standard和.NET Framework中各种项目的需求。 IronPDF保证从HTML内容生成PDF时的精确性、简便性和高效性,并支持Web、桌面和控制台应用程序。

安装IronPDF库

要在项目中启动IronPDF,请通过Visual Studio内的NuGet包管理器安装该库。 然后只需遵循以下简单步骤:

  1. 打开 Visual Studio,然后导航到解决方案资源管理器。

  2. 右键单击“依赖项”,选择“管理 NuGet 包”选项。

  3. 选择“浏览”选项卡并搜索“IronPdf”。

  4. 选择 IronPDF 并点击“安装”。

    或者,在 Visual Studio 中,您可以使用包管理器控制台通过执行以下命令来安装库:

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
$vbLabelText   $csharpLabel

IronPDF与LiteDB的示例用法

下面是一个简单的代码示例,展示了使用IronPDF从HTML内容生成PDF的方法,使用‘using’语句以确保正确释放资源。 在此,我们结合了LiteDB和IronPDF的功能,展示了如何将LiteDB中的数据输出为PDF以供查看:

using DemoLiteDB1;
using LiteDB;
using System.Text;
class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            var products = db.GetCollection<Product>("products");
            var productList = new[]
            {
                new Product { Id = 101, Name = "Apple", Price = 0.99m },
                new Product { Id = 102, Name = "Banana", Price = 0.59m },
                new Product { Id = 103, Name = "Orange", Price = 0.79m },
                new Product { Id = 104, Name = "Grape", Price = 2.99m },
                new Product { Id = 105, Name = "Watermelon", Price = 4.99m }
            };
            foreach (var product in productList)
            {
                products.Insert(product);
            }
            Console.WriteLine("Product inserted successfully.");
            // Fetch all products from the database
            var allProducts = GetAllProducts(db);
            // Generate HTML content from the product list
            string htmlContent = GenerateHtml(allProducts);
            // Generate the PDF from the HTML content
            GeneratePDF(htmlContent);
            Console.WriteLine("PDF generated successfully.");
        }
    }
    public static List<Product> GetAllProducts(LiteDatabase db)
    {
        var products = db.GetCollection<Product>("products");
        return products.FindAll().ToList();
    }
    public static void GeneratePDF(string data)
    {
        IronPdf.License.LicenseKey = "Your-License-Key";
        Console.WriteLine("PDF Generating Started...");
        var renderer = new ChromePdfRenderer();
        Console.WriteLine("PDF Processing ....");
        var pdf = renderer.RenderHtmlAsPdf(data);
        string filePath = "Data.pdf";
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
    }
    public static string GenerateHtml(List<Product> products)
    {
        StringBuilder htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>");
        htmlBuilder.Append("<h1>Product List</h1>");
        htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>");
        foreach (var product in products)
        {
            htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>");
        }
        htmlBuilder.Append("</table></body></html>");
        return htmlBuilder.ToString();
    }
}
using DemoLiteDB1;
using LiteDB;
using System.Text;
class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            var products = db.GetCollection<Product>("products");
            var productList = new[]
            {
                new Product { Id = 101, Name = "Apple", Price = 0.99m },
                new Product { Id = 102, Name = "Banana", Price = 0.59m },
                new Product { Id = 103, Name = "Orange", Price = 0.79m },
                new Product { Id = 104, Name = "Grape", Price = 2.99m },
                new Product { Id = 105, Name = "Watermelon", Price = 4.99m }
            };
            foreach (var product in productList)
            {
                products.Insert(product);
            }
            Console.WriteLine("Product inserted successfully.");
            // Fetch all products from the database
            var allProducts = GetAllProducts(db);
            // Generate HTML content from the product list
            string htmlContent = GenerateHtml(allProducts);
            // Generate the PDF from the HTML content
            GeneratePDF(htmlContent);
            Console.WriteLine("PDF generated successfully.");
        }
    }
    public static List<Product> GetAllProducts(LiteDatabase db)
    {
        var products = db.GetCollection<Product>("products");
        return products.FindAll().ToList();
    }
    public static void GeneratePDF(string data)
    {
        IronPdf.License.LicenseKey = "Your-License-Key";
        Console.WriteLine("PDF Generating Started...");
        var renderer = new ChromePdfRenderer();
        Console.WriteLine("PDF Processing ....");
        var pdf = renderer.RenderHtmlAsPdf(data);
        string filePath = "Data.pdf";
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
    }
    public static string GenerateHtml(List<Product> products)
    {
        StringBuilder htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>");
        htmlBuilder.Append("<h1>Product List</h1>");
        htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>");
        foreach (var product in products)
        {
            htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>");
        }
        htmlBuilder.Append("</table></body></html>");
        return htmlBuilder.ToString();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

该代码连接到LiteDB数据库,添加产品列表,检索所有产品,并生成产品列表的HTML表示。然后使用IronPDF库将此HTML内容用于创建PDF文件。 该过程包括添加产品、获取产品、将产品列表转换为HTML以及生成PDF的方法。

输出

LiteDB .NET(为开发者服务的工作方式):图3 - 来自前一段代码的控制台输出

PDF文件输出

LiteDB .NET(如何为开发人员工作):图4 - 从之前代码输出的PDF

结论

LiteDB为C#开发人员提供了一个轻量级的无服务器嵌入式文档数据库解决方案,非常适合小型项目和移动应用程序,具有如MongoDB启发的API、嵌入式数据库和跨平台兼容性等特性。

同时,IronPDF 作为一个顶级的 C# PDF 库出现,通过其 HTML 到 PDF 转换和 NuGet 集成,简化了 .NET 项目中的 PDF 生成和操作。 LiteDB 和 IronPDF 都为开发人员提供了有价值的工具,LiteDB 擅长于数据库管理,而 IronPDF 擅长于 PDF 处理。

IronPDF 提供免费试用,以释放其在 PDF 生成和操作中的全部潜力。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
RestEase C#(开发人员如何使用)
下一步 >
FireSharp C#(它对开发者的工作原理)