Implementando SQLite en dotnet MAUI

Hay muchas formas de almacenar información en aplicaciones, dependiendo de la plataforma, respondiendo a diferentes necesidades y requisitos. ¿Almacenamiento interno, bases de datos, una API? Para el #AdvientoMAUI, donde puedes encontrar contenido genial de la comunidad sobre el framework, vamos a tratar una de estas posibilidades: gestionar datos desde una base de datos.

Para una aplicación móvil o una aplicación que no maneje masivas cantidades de datos, necesitaremos algo compacto, de bolsillo, que ocupe lo menos posible… ¡y SQLite es justo lo que necesitamos!

Sobre SQLite

Este motor de base de datos apareció en 2001, para resolver los casos en los que no necesites algo tan potente y de las dimensiones de SQL Server o MariaDB.

Tal y como la describen en su web, buscaban crear algo rapido, pequenio, de alta confiabilidad y con todas las caracteristicas que consideramos necesarias en un motor de SQL.

Es ideal para contener muchos datos en el menor espacio posible… por lo que parece la solución perfecta para las aplicaciones móviles, ¿cierto?

Usando SQLite en MAUI

Como prácticamente todo en el mundo del desarrollo, hay muchas formas de hacer una cosa o conseguir un mismo objetivo. A la hora de gestionar datos para almacenar en una aplicación móvil pasa lo mismo pero seguramente escojamos la opción más duradera o fácil de mantener en el tiempo.

Es por eso que los ORMs (Object Relational Mappers) son una opción fantástica para ella. Estos ORMs nos permiten gestionar las entidades de bases de datos como objetos o Clases en C#, además de permitirnos centralizar todas las operaciones en un mismo lugar.

Existen ORMs para diferentes lenguajes, en diferentes sabores y estilos… pero hay uno en particular que se ha popularizado: sql-net-pcl.

Existen alternativas que por supuesto podemos explorar en otros artículos.

Instalación

Para usarlo en tu proyecto, usa el NuGet Package Manager del proyecto para instalar el siguient package: Sqlite-Net-PCL.

O bien pudes usarla Package Manager Console para ejecutar el siguiente comando:

Install-Package sqlite-net-pcl -Version 1.8.116

En el caso de que queramos usarlo en proyectos Android, también necesitaremos el siguiente package: SQLitePCLRaw.provider.dynamic_cdecl.

A través de Package Manager Console, puedes ejecutar la siguiente instrucción:

Install-Package SQLitePCLRaw.provider.dynamic_cdecl -Version 2.1.2

… o bien hacerlo desde Visual Studio y su NuGet Package Manager.

Debo recordar que estas versiones mencionadas son las ultimas disponibles al momento de escribir este post, asi que no dudes en buscar las más recientes.

Creando nuestro repo

Con el fin de centralizar todas las operaciones de la BD sobre una misma entidad, crearemos una Clase o repositorio desde el que hacerlo. Para empezar a trabajar, podemos crear un metodo inicializador como el que vemos a continuacion.

private void Init()
{
    if (connection != null) return;

    connection = new SQLiteConnection(_dbPath);

    connection.CreateTable<SomeEntity>();
    connection.CreateTable<AnotherEntity>();
}

Hacemos referencia al valor _dbPath, que es la ruta específica para el fichero que contiene la base de datos. Puede establecerse como una variable hardcoded o inyectarla a través de la configuración del proyecto.

¿Un ejemplo? Las bases de datos en SQLite son ficheros únicos con la extensión .db3, como por ejemplo: myAppDB.db3. Con ese dato, podemos ejecutar el codigo anterior, con el que ya tendremos persistencia de datos.

Si fuera necesario, podemos operar con la base de datos (¡incluso desde Visual Studio Code!).

Operando con tablas

Las operaciones CRUD son muy sencillas, tal y como las realizaríamos en cualquier colección con LINQ:

// Obteniendo elementos
var elements = connection.Table<Team>().ToList();

// Creando
connection.Insert(item);
// Incluso podemos hacer insercion multiple
connection.InsertAll(list);

// Eliminando
connection.Delete(item);

// Actualizando
connection.Update(item);

Mi approach con esta herramienta es crear un repository en el que centralizar todas estas operaciones, pudiendo tener un repositorio concreto para cada entidad, introduciendo datos iniciales, comprobando si la conexión ya existe… todo lo que serían buenas prácticas para trabajar con diferentes tablas.


Tal y como habéis podido comprobar, tener una base de datos funcionando es muy sencillo.

Puedes encontrar un ejemplo de este approach en el siguiente proyecto en GitHub, Bat and Ball Teams, que utilizo para demos para diferentes eventos y que espero que os sea útil.

Si tenéis dudas o recomendaciones, no dudéis en compartirlas en comentarios de esta publicación o en redes sociales.

Os deseo un feliz adviento y happy coding!

3 comentarios sobre “Implementando SQLite en dotnet MAUI

Deja un comentario