Al desarrollar .NET y .NET Core basados ​​en bases de datos, independientemente de la base de datos que pretendemos implementar al final, a menudo querremos trabajar con un motor de base de datos que sea liviano y rápido, para poder ejecutar pruebas rápidamente y acelerar el desarrollo. . En este caso, SQLite es una opción ideal. Puede utilizar SQLite para obtener un acceso a los datos más rápido y ocupar menos espacio. La base de datos SQLite generalmente se almacena como un archivo de disco único, aunque también puede funcionar como una base de datos en memoria. Sin embargo, a diferencia de una base de datos en memoria, SQLite le permite consultar datos sin tener que cargar todo el conjunto de datos en la memoria. Dapper, el “micro ORM” liviano y de código abierto sobre el que he escrito a menudo, admite muchas bases de datos, incluido SQL. Servidor, MySQL, SQLite, SQL CE y Firebird. Al utilizar Dapper en sus aplicaciones, puede simplificar el acceso a los datos y al mismo tiempo garantizar un alto rendimiento. En este artículo, examinaremos cómo trabajar con una base de datos SQLite usando Dapper en aplicaciones ASP.NET Core. Para utilizar los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2022 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2022 aquí. Cree un proyecto de ASP.NET Core Web API en Visual Studio 2022. Para crear un proyecto de ASP.NET Core Web API en Visual Studio 2022, siga los pasos que se describen a continuación. . Inicie el IDE de Visual Studio 2022. Haga clic en «Crear nuevo proyecto». En la ventana «Crear nuevo proyecto», seleccione «ASP.NET Core Web API» de la lista de plantillas que se muestran. Haga clic en Siguiente. En la ventana «Configura tu nuevo proyecto», especifica el nombre y la ubicación del nuevo proyecto. Opcionalmente, marque la casilla de verificación «Colocar solución y proyecto en el mismo directorio», según sus preferencias. Haga clic en Siguiente. En la ventana «Información adicional» que se muestra a continuación, seleccione «.NET 8.0 (soporte a largo plazo)» como versión del marco. Asegúrese de que la casilla de verificación que dice «Usar controladores» no esté marcada, ya que no usaremos controladores en este proyecto. En otra parte de la ventana «Información adicional», deje el «Tipo de autenticación» configurado en «Ninguno» (el valor predeterminado) y asegúrese de que las casillas de verificación «Habilitar compatibilidad con Open API», «Configurar para HTTPS» y «Habilitar Docker» permanezcan sin marcar. . No utilizaremos ninguna de esas funciones aquí. Haga clic en Crear. Usaremos este proyecto ASP.NET Core Web API para trabajar con los ejemplos de código que se proporcionan en las secciones siguientes. Instale los paquetes Dapper y SQLite NuGet. En este ejemplo, usaremos Dapper para conectarnos y trabajar con una base de datos SQLite. Por lo tanto, necesitaremos instalar los paquetes Dapper y SQLite NuGet en el proyecto. Para hacer esto, seleccione el proyecto en la ventana del Explorador de soluciones, luego haga clic derecho y seleccione «Administrar paquetes NuGet». En la ventana del Administrador de paquetes NuGet, busque los paquetes Dapper y Microsoft.Data.Sqlite e instálelos. Alternativamente, puede instalar los paquetes a través de la consola del Administrador de paquetes NuGet ingresando el siguiente comando. PM> Install-Package DapperPM> Install-Package Microsoft.Data.SqliteCrear un nuevo DbContext en EF CoreEl DbContext es un componente integral de Entity Framework Core que representa una sesión de conexión con la base de datos. Cree una nueva clase denominada CustomDbContext extendiendo la clase DbContext de EF Core e ingrese el siguiente código allí. clase pública CustomDbContext: DbContext { protected override void OnConfiguring (DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseInMemoryDatabase(databaseName: «IDGSampleDb»); } conjunto de bases de datos público Usuarios {obtener; colocar; } }Crear una base de datos SQLitePara crear una nueva base de datos SQLite, todo lo que tiene que hacer es crear una nueva instancia de la clase SqliteConnection y pasar su nombre para la base de datos como parámetro a su constructor como se muestra a continuación.string DatabaseName = «demo.db «; _ = new SqliteConnection(«Data Source=» + nombre de la base de datos); tenga en cuenta el uso del literal _ (guión bajo) en el lado izquierdo del operador de asignación. Esto también se conoce como descarte y se usa para informar al compilador que incluso si el método devuelve un valor, no desea usarlo. Una vez que se haya creado la base de datos SQLite, puede usar el siguiente fragmento de código para crear una tabla. en la base de datos. sqliteConnection.Execute( @»crear tabla Autor (ID entero identidad clave principal, Nombre varchar(50) no nulo, Apellido varchar(50) no nulo, Dirección nvarchar(100) no nulo)»);La Figura 1 muestra la base de datos y su tabla creada en el DBBrowser de SQLiteStudio. IDG Figura 1. Nuestra nueva base de datos y tabla SQLite. La siguiente clase llamada CustomDataContext contiene el código completo para crear una base de datos SQLite y una tabla dentro de ella. Usando Dapper; utilizando Microsoft.Data.Sqlite; clase pública CustomDataContext { conexión Sqlite privada CreateDatabaseConnection (nombre de la base de datos de cadena) { return new SqliteConnection («Fuente de datos=» + nombre de la base de datos); } Tarea asíncrona pública
CreateDatabase(string DatabaseName) { usando (var sqliteConnection = CreateDatabaseConnection(databaseName)) { await sqliteConnection.ExecuteAsync( @»CREAR TABLA SI NO EXISTE Autor (Id. INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Nombre TEXTO NO NULO, Apellido TEXTO NO NULO, Dirección TEXTO NO NULO )»); devolver conexión sqlite; } } }Puede llamar al método CreateDatabase de la clase CustomDataContext y pasar el nombre de la base de datos SQLite que desea crear usando el siguiente código.await new CustomDataContext().CreateDatabase(«demo.db»);Create an Author repositorio e interfaz en ASP.NET CoreCreemos ahora un repositorio, llamado Author, que comprenderá dos tipos: la interfaz IAuthorRepository y la clase AuthorRepository. Cada uno de estos tipos utilizará la clase Autor como modelo. El código fuente de la clase de modelo Author se proporciona a continuación. clase pública Autor { público int Id { get; colocar; } cadena pública Nombre { get; colocar; } cadena pública Apellido { get; colocar; } dirección de cadena pública { get; colocar; } }A continuación, cree una nueva interfaz llamada IAuthorRepository y reemplace el código generado con el siguiente listado de código. interfaz pública IAuthorRepository { Tarea> ObtenerTodo(); Tarea GetById(int identificación); Crear tarea (Autor Autor); Actualización de tareas(Autor Autor); Eliminar tarea (int id); }La clase AuthorRepository implementará cada uno de los métodos de la interfaz IAuthorRepository como se muestra a continuación.clase pública AuthorRepository : IAuthorRepository { private CustomDataContext _context; nombre de base de datos de cadena privada = «demo.db»; public AuthorRepository(contexto CustomDataContext) { _context = contexto; } Tarea asíncrona pública> GetAll() { usando conexión var = await _context.CreateDatabase(databaseName); var sql = «SELECCIONAR * DEL Autor»; volver en espera de conexión.QueryAsync(sql); } Tarea asíncrona pública GetById(int id) { usando var sqliteConnection = await _context.CreateDatabase(databaseName); string sql = «SELECCIONAR * DEL Autor DONDE Id = @id»; volver a esperar sqliteConnection. QueryFirstOrDefaultAsync(sql, nuevo {identificación}); } creación de tarea asíncrona pública (autor autor) { usando var sqliteConnection = await _context.CreateDatabase (nombre de la base de datos); string sql = «INSERTAR EN Autor (Nombre, Apellido, Dirección) » + «VALUES (@Nombre, @Apellido, @Dirección)»; espere sqliteConnection.ExecuteAsync(sql, Autor); } Actualización de tarea asíncrona pública (Autor Autor) { usando var sqliteConnection = await _context.CreateDatabase(databaseName); string sql = «ACTUALIZAR Autor SET Nombre = @Nombre, » + «Apellido = @Apellido, Dirección = @Dirección WHERE Id = @Id»; espere sqliteConnection.ExecuteAsync(sql, Autor); } eliminación de tarea asíncrona pública (int id) { usando var sqliteConnection = await _context.CreateDatabase(databaseName); string sql = «ELIMINAR DEL Autor DONDE Id = @id»; espere sqliteConnection.ExecuteAsync(sql, nuevo {id}); } }Registrar dependencias en ASP.NET CoreA continuación, debe registrar las dependencias con la canalización de procesamiento de solicitudes para poder utilizar la inyección de dependencias para crear estas instancias donde las necesite. El siguiente código muestra cómo puede registrar instancias de CustomDataContext y AuthorRepository en el archivo Program.cs.builder.Services.AddScoped(); constructor.Services.AddScoped();Crear puntos finales HTTP en ASP.NET CoreAhora puede usar el siguiente código para crear los puntos finales para realizar operaciones CRUD (crear, leer, actualizar, eliminar) en la base de datos.app.MapGet(«/authors/{id}» , async (int id, repositorio IAuthorRepository) => await repository.GetById(id)); app.MapPut(«/authors», async (Autor autor, repositorio IAuthorRepository) => await repository.Update(autor)); app.MapPost(«/authors», async (autor autor, repositorio IAuthorRepository) => await repository.Create(autor)); app.MapDelete(«/authors/{id}», async (int id, IAuthorRepository repository) => await repository.Delete(id)); y eso es todo lo que necesitas hacer. Ahora puede invocar los puntos finales según sea necesario. Por ejemplo, puede invocar el punto final HTTP Get /authors para mostrar todos los registros de autor en el navegador web como se muestra en la Figura 2. IDG Figura 2: Visualización de los registros de autor en el navegador web. SQLite es liviano, rápido y fácil de usar, pero también tiene ciertas desventajas. No es escalable ni adecuado para almacenar volúmenes masivos de datos. Para el almacenamiento de datos a gran escala y aplicaciones de alto tráfico que atienden a muchos usuarios simultáneos, debe considerar una base de datos cliente/servidor como SQL Server o MySQL. Pero SQLite brilla como compañero de desarrollo y para uso en aplicaciones de escritorio, móviles, IoT y integradas. Copyright © 2024 IDG Communications, Inc.