Saltar al pie de página
.NET AYUDA

LiteDB .NET (Cómo Funciona para Desarrolladores)

LiteDB es una base de datos de documentos .NET embebida, simple, rápida y ligera. LiteDB .NET se inspiró en la base de datos MongoDB y su API es muy similar a la API oficial de .NET de MongoDB. LiteDB es una base de datos sin servidor que funciona bien para proyectos pequeños y aplicaciones móviles.

Este artículo te proporcionará instrucciones precisas sobre cómo utilizar las capacidades de LiteDB en tus proyectos. También introducimos el uso de IronPDF, una biblioteca .NET creada por Iron Software, para generar y manipular PDFs y cómo puedes emplearla para exportar el contenido de una base de datos LiteDB como un PDF para ver y compartir.

Características principales de LiteDB

  1. Base de Datos Embebida: No necesitas un servidor separado. LiteDB se ejecuta dentro del proceso de tu aplicación.
  2. Archivo Único de Datos: Puedes almacenar en una base de datos de un solo archivo, todos tus datos, simplificando el despliegue y la copia de seguridad.
  3. Formato BSON: Usa el formato BSON para el almacenamiento, asegurando operaciones de lectura y escritura rápidas.
  4. Soporte LINQ: Soporte completo para LINQ en consultas, lo que lo hace intuitivo para los desarrolladores de .NET.
  5. Transacciones ACID: Garantiza la integridad de los datos con soporte para transacciones ACID.
  6. Multiplataforma: Funciona en Windows, Linux y macOS.

Cómo configurar LiteDB en proyectos .NET

Abre tu proyecto en Visual Studio. Luego, en el Explorador de Soluciones, haz clic derecho en tu proyecto y elige "Administrar Paquetes NuGet". Busca LiteDB e instálalo para incorporar esta solución de base de datos en tu proyecto sin esfuerzo.

Alternativamente, puedes instalarlo usando la Consola del Administrador de Paquetes. Para instalar LiteDB en la Consola del Administrador de Paquetes NuGet, usa el siguiente comando:

Install-Package LiteDB

Cómo empezar con LiteDB

Una vez instalado, puedes empezar a usar LiteDB en tu aplicación. Veamos algunos ejemplos para ilustrar su uso.

Ejemplo 1: Creación e inserción de datos

Primero, creemos una clase simple Product para representar nuestros datos:

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; }
}
$vbLabelText   $csharpLabel

A continuación, crearemos una base de datos e insertaremos algunos productos:

using LiteDB;
using System;

class Program
{
    static void Main()
    {
        // Open the database (or create it if it doesn't exist)
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Get a collection (or create, if it doesn't exist)
            var products = db.GetCollection<Product>("products");

            // Create a list of products to insert into the database
            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 }
            };

            // Insert each product into the collection
            foreach (var product in productList)
            {
                products.Insert(product);
            }

            Console.WriteLine("Product inserted successfully.");
        }
    }
}
using LiteDB;
using System;

class Program
{
    static void Main()
    {
        // Open the database (or create it if it doesn't exist)
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Get a collection (or create, if it doesn't exist)
            var products = db.GetCollection<Product>("products");

            // Create a list of products to insert into the database
            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 }
            };

            // Insert each product into the collection
            foreach (var product in productList)
            {
                products.Insert(product);
            }

            Console.WriteLine("Product inserted successfully.");
        }
    }
}
$vbLabelText   $csharpLabel

Descripción del código

El código inicializa una conexión a una base de datos LiteDB llamada "MyData.db" y recupera una colección llamada "productos". Luego crea una matriz de objetos Product con varias propiedades, como ID, Nombre y Precio. Cada producto en la matriz se inserta en la colección "productos" dentro de la base de datos. Después de insertar exitosamente todos los productos, imprime un mensaje de confirmación en la consola.

La salida es como sigue:

LiteDB .NET (Cómo Funciona para Desarrolladores): Figura 1 - Salida de consola del código anterior

Ejemplo: Agilización de la gestión de datos de usuario

Imagina que estás desarrollando una aplicación móvil que gestiona cuentas de usuarios. Cada usuario tiene un perfil que contiene su nombre, dirección de correo electrónico, preferencias (almacenadas como un objeto JSON) y una lista de elementos favoritos. He aquí cómo LiteDb.NET puede simplificar tu almacenamiento de datos:

Este código define una clase User para representar los datos del usuario y una clase UserManager para gestionar operaciones de usuario en una base de datos LiteDb.NET.

using LiteDB;
using System.Collections.Generic;

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;
using System.Collections.Generic;

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);
    }
}
$vbLabelText   $csharpLabel

Esta implementación aprovecha eficazmente las capacidades de LiteDb.NET para la gestión de datos de usuarios. La clase User almacena la información del usuario, mientras que la clase UserManager proporciona métodos para guardar, recuperar, actualizar y eliminar usuarios dentro de la base de datos.

LiteDB, base de datos NoSQL integrada para .NET

LiteDB es perfecta para aplicaciones de tamaño pequeño a mediano sin necesidades de concurrencia de usuarios. Por ejemplo, es ideal para una aplicación de consola personal donde quieres almacenar datos de manera simple y rápida. Desarrollada únicamente en C#, es ligera, ocupa menos de 450KB y no depende de dependencias externas.

Algunos puntos adicionales, que se enumeran en su página de GitHub:

  1. Almacenamiento de Documentos NoSQL sin Servidor
  2. API sencilla, similar a MongoDB
  3. Seguro para hilos
  4. Escrita completamente en C#, LiteDB es compatible con .NET 4.5, NETStandard 1.3/2.0, empaquetada en un solo archivo DLL que ocupa menos de 450KB.
  5. ACID con soporte completo de transacciones
  6. Recuperación de datos tras fallos de escritura (registros WAL)
  7. Cifrado de archivos de datos utilizando criptografía AES
  8. Puedes mapear fácilmente tus clases de Objetos CLR Simples (POCO) a BsonDocument usando atributos o el API de mapeo fluido proporcionado por LiteDB.
  9. Almacenar archivos y transmitir datos (como GridFS en MongoDB)
  10. Almacenamiento de archivos de datos únicos (como SQLite)
  11. Indexar campos de documentos para búsqueda rápida
  12. Soporte LINQ para consultas
  13. Comandos similares a SQL para acceder/transformar datos
  14. LiteDB Studio – Bonita interfaz para acceder a datos
  15. Código abierto y gratuito para todos – incluyendo uso comercial

Introducción a IronPDF: A C# PDF Library

LiteDB .NET (Cómo Funciona para Desarrolladores): Figura 2 - Página web IronPDF

IronPDF, una biblioteca de PDF C# de primera categoría, facilita la creación, edición y manipulación de PDFs en proyectos .NET. Ofrece una API completa para tareas como la conversión de HTML a PDF, generación dinámica de PDF y extracción de datos. Utilizar un motor Chromium .NET garantiza una representación precisa de archivos HTML en PDF, satisfaciendo diversas necesidades de proyectos en .NET Core, .NET Standard y .NET Framework. IronPDF garantiza precisión, simplicidad y eficiencia en la generación de PDF a partir de contenido HTML con soporte para aplicaciones web, de escritorio y de consola.

Instalación de la biblioteca IronPDF

Para iniciar IronPDF en tu proyecto, instala la biblioteca a través del Administrador de Paquetes NuGet dentro de Visual Studio. Luego sigue estos pasos sencillos:

  1. Abre Visual Studio y navega hasta el Explorador de Soluciones.
  2. Haz clic derecho en Dependencias y selecciona la opción "Administrar Paquetes NuGet".
  3. Elige la pestaña "Explorar" y busca "IronPDF".
  4. Selecciona IronPDF y haz clic en "Instalar".

Alternativamente, dentro de Visual Studio, puedes utilizar la Consola del Administrador de Paquetes para instalar la biblioteca ejecutando el siguiente comando:

Install-Package IronPdf

Ejemplo de uso de IronPDF con LiteDB

Aquí tienes un sencillo ejemplo de código que ilustra el uso de IronPDF para generar un PDF a partir de contenido HTML, empleando la declaración 'using' para asegurar la disposición adecuada de los recursos. Aquí combinamos la funcionalidad de LiteDB y IronPDF mostrando cómo puedes exportar los datos dentro de un LiteDB como un PDF para fines de visualización:

using LiteDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPdf;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Retrieve the 'products' collection or create it
            var products = db.GetCollection<Product>("products");

            // Add some initial products to the collection
            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 }
            };

            // Insert products into the LiteDB collection
            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)
    {
        // Set your IronPDF license key here
        IronPdf.License.LicenseKey = "Your-License-Key";
        Console.WriteLine("PDF Generating Started...");

        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();
        Console.WriteLine("PDF Processing ....");

        // Render the HTML as a PDF
        var pdf = renderer.RenderHtmlAsPdf(data);

        // Save the PDF to a file
        string filePath = "Data.pdf";
        pdf.SaveAs(filePath);

        Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
    }

    public static string GenerateHtml(List<Product> products)
    {
        // Build HTML table from product list
        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>");

        // Add each product row to the HTML table
        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 LiteDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPdf;

class Program
{
    static void Main()
    {
        using (var db = new LiteDatabase(@"MyData.db"))
        {
            // Retrieve the 'products' collection or create it
            var products = db.GetCollection<Product>("products");

            // Add some initial products to the collection
            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 }
            };

            // Insert products into the LiteDB collection
            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)
    {
        // Set your IronPDF license key here
        IronPdf.License.LicenseKey = "Your-License-Key";
        Console.WriteLine("PDF Generating Started...");

        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();
        Console.WriteLine("PDF Processing ....");

        // Render the HTML as a PDF
        var pdf = renderer.RenderHtmlAsPdf(data);

        // Save the PDF to a file
        string filePath = "Data.pdf";
        pdf.SaveAs(filePath);

        Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
    }

    public static string GenerateHtml(List<Product> products)
    {
        // Build HTML table from product list
        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>");

        // Add each product row to the HTML table
        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();
    }
}
$vbLabelText   $csharpLabel

El código se conecta a una base de datos LiteDB, agrega una lista de productos, recupera todos los productos y genera una representación HTML de la lista de productos. Este contenido HTML luego se usa para crear un archivo PDF usando la biblioteca IronPDF. El proceso incluye métodos para agregar productos, recuperarlos, convertir la lista de productos a HTML y generar el PDF.

Resultado

LiteDB .NET (Cómo Funciona para Desarrolladores): Figura 3 - Salida de consola del código anterior

Fichero PDF de salida

LiteDB .NET (Cómo Funciona para Desarrolladores): Figura 4 - PDF generado del código anterior

Conclusión

LiteDB presenta a los desarrolladores C# con una solución de base de datos de documentos embebida, ligera y sin servidor, ideal para proyectos pequeños y aplicaciones móviles, con características como una API inspirada en MongoDB, bases de datos embebidas y compatibilidad multiplataforma.

Simultáneamente, IronPDF surge como una biblioteca de PDF C# de primera categoría, simplificando la generación y manipulación de PDFs dentro de proyectos .NET con su conversión de HTML a PDF e integración NuGet. Tanto LiteDB como IronPDF ofrecen herramientas valiosas para los desarrolladores, con LiteDB sobresaliendo en la gestión de bases de datos y IronPDF en el manejo de PDFs.

IronPDF ofrece una prueba gratuita para desbloquear su máximo potencial en generación y manipulación de PDFs.

Preguntas Frecuentes

¿Cómo puedo convertir contenido HTML a PDF en C#?

Puede convertir contenido HTML a PDF en C# usando IronPDF. La biblioteca proporciona métodos como RenderHtmlAsPdf que permiten la conversión de cadenas HTML en documentos PDF.

¿Cuál es la mejor manera de integrar LiteDB con un proyecto .NET?

Para integrar LiteDB con un proyecto .NET, puede usar el Administrador de Paquetes NuGet en Visual Studio para instalar LiteDB. Esto le permite gestionar su base de datos directamente dentro de su aplicación utilizando C#.

¿Cómo puedo generar PDFs a partir de datos de LiteDB?

Para generar PDFs a partir de datos de LiteDB, puede usar IronPDF. Al extraer datos de LiteDB y renderizarlos usando las capacidades de IronPDF, puede crear documentos PDF para fines de informes o para compartir.

¿Puedo usar IronPDF para manipular archivos PDF existentes en C#?

Sí, IronPDF puede usarse para manipular archivos PDF existentes. Proporciona funcionalidades para editar, fusionar y extraer contenido de PDFs dentro de aplicaciones C#.

¿Es posible usar LiteDB para aplicaciones móviles?

Sí, LiteDB es particularmente adecuado para aplicaciones móviles debido a su naturaleza ligera, sin servidor, y a su capacidad para almacenar datos en un solo archivo.

¿Cuáles son algunos pasos comunes para solucionar problemas de integración con LiteDB?

Los pasos comunes para solucionar problemas de integración con LiteDB incluyen verificar la correcta instalación a través de NuGet, asegurarse de que la ruta de su archivo de base de datos sea accesible y confirmar que la versión de .NET de su proyecto sea compatible con LiteDB.

¿Cómo puedo asegurar la integridad de los datos usando LiteDB?

LiteDB admite transacciones ACID que aseguran la integridad y fiabilidad de los datos. Puede usar transacciones para mantener consistencia y manejar modificaciones concurrentes de datos.

¿Cuáles son los beneficios de usar IronPDF para la generación de PDFs en .NET?

IronPDF ofrece beneficios como conversión fácil de HTML a PDF, alta precisión en la representación y completas características de manipulación de PDF, lo que lo hace ideal para generar y manejar PDFs en aplicaciones .NET.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más