Lex.DB Generic DataAccess methods

Últimamente estoy trabajando con Lex.DB, una base de datos creada por Lex que ofrece algunas ventajas respecto a SQLite y que tiene un rendimiento muy convincente. Además ofrece la opción de usarse en proyectos Portable Class Library, con lo que todavía se vuelve más interesante.

El caso es que tras darle una vuelta de tuerca al ejemplo escrito en la página de Nokia Developer decidí hacer genéricos los métodos de la clase DataAccess, sobretodo para no escribir una y otra vez los métodos GET, UPDATE y REMOVE y bueno, aquí está el resultado.

public class DataAccess
{
    DbInstance _db;

    public DataAccess()
    {
        _db = new DbInstance("LexDB");

        // añadimos todas las tablas
        _db.Map<Customer>().Automap(i => i.Id, true);

        _db.InitializeAsync();
    }

    /// <summary>
    /// Obtiene un ítem por id
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="lexId"></param>
    /// <returns></returns>
    public Task<T> Get<T>(int lexId) where T : class
    {
        return _db.Table<T>().LoadByKeyAsync(lexId);
    }

    /// <summary>
    /// Obtiene todos los ítems de una tabla
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public async Task<IEnumerable<T>> Get<T>() where T : class
    {
        return (await _db.Table<T>().LoadAllAsync()).AsEnumerable();
    }

    /// <summary>
    /// Obtiene el último ítem de una tabla
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public T GetLast<T>() where T : class
    {
        return _db.Table<T>().LastOrDefault();
    }

    /// <summary>
    /// Guarda un ítem
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="item"></param>
    /// <returns></returns>
    public Task Update<T>(T item) where T : class
    {
        return _db.Table<T>().SaveAsync(item);
    }

    /// <summary>
    /// Elimina un ítem
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="item"></param>
    /// <returns></returns>
    public Task<bool> Remove<T>(T item) where T : class
    {
        return _db.Table<T>().DeleteAsync(item);
    }

    /// <summary>
    /// Elimina todos los datos de una tabla
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public Task Purgue<T>() where T : class
    {
        return _db.Table<T>().PurgeAsync();
    }
}
blog comments powered by Disqus