SQLite + Dapper: convierte valores a enum

c# dapper enums sqlite

Pregunta

Tengo una base de datos SQLite con una tabla de event consta de cuatro columnas: id (INT), timestamp (TEXTO), level (TEXTO) y message (TEXTO). Cuando vuelvo a leer los eventos, quiero convertir los valores de level valores enum LogLevel correspondientes. Los valores de texto son los mismos que los nombres de los miembros enum. ¿Cómo puedo hacer esto? Veo que si uso Query<object> obtengo una lista en la que puedo enumerar todas las filas y convertirlas antes de agregarlas a los nuevos valores de la estructura del Event . ¿Pero es esta la mejor / más fácil forma de hacer esto?

public struct Event
{
    public Event(DateTime timestamp, LogLevel level, string message)
    {
        Timestamp = timestamp;
        Level = level;
        Message = message;
    }
    public DateTime Timestamp { get; }
    public LogLevel Level { get; }
    public string Message { get; }
}

public enum LogLevel
{
    FATAL,
    ERROR,
    WARN,
    INFO
}

public List<Event> GetNewEvents(uint rowId)
{
    var events = _dbConnection.Query<Event>("SELECT * FROM events WHERE id >= @RowId;", new { RowId = rowId });
    return events.ToList();
}

Respuesta aceptada

Dapper mapeará automáticamente los valores enum si los valores de la columna 'nivel' coinciden con los valores enum. Sin embargo, es posible que tenga un problema con ese constructor. Además, no estoy seguro de por qué has usado struct. Simplemente cambie su evento a struct a clase a continuación.

public class Event
{           
    public DateTime Timestamp { get; set; }
    public LogLevel Level { get; set; }
    public string Message { get; set; }
}

El resto es lo mismo



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué