SQLite+Dapper:将值转换为枚举

SQLite+Dapper: Convert values to enum

我有一个 SQLite 数据库,其中 event table 由四列组成:id (INT)、timestamp (TEXT)、level (文本)和 message(文本)。当我回读事件时,我想将 level 值转换为相应的 LogLevel 枚举值。文本值与枚举成员名称相同。我怎样才能做到这一点?我看到如果我使用 Query<object> 我会得到一个列表,我可以在其中枚举所有行并在将它们添加到新的 Event 结构值之前进行转换。但这是 best/easiest 的方法吗?

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();
}

如果您的 'level' 列值与枚举值匹配,Dapper 将自动映射枚举值。但是,您可能对该构造函数有疑问。也不确定你为什么使用 struct。只需将您的事件结构更改为下面的 class。

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

其余相同