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; }
}
其余相同
我有一个 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; }
}
其余相同