将枚举存储到数据库的流畅方法



我有一个这样的枚举

public enum TimeFrame
{
  Morning = 1,
  Afternoon,
  Evening
}

存储包含 TimeFrame 类型的属性的对象时,会使用 switch 语句进行转换,将每个值显式设置为 1、2 和 3。创建的命令字符串从例如晚上替换为 3。从数据库获取时也是如此 - 如果值为 1,则会手动并显式映射到 Morning

有没有一种平滑的方法来"按原样"存储枚举的值?还是我们应该出于某种原因避免这样做?

我已经尝试了直接的方法,但这只能一直提供回退价值......

TimeFrame = row["TimeFrame"] as TimeFrame? ?? TimeFrame.Morning

您可以将枚举转换为整数,反之亦然,这非常快。您还可以在枚举和字符串之间进行转换,需要更多的代码、时间和存储空间。然后,您可以在数据库中简单地存储整数或字符串。

如果由于某种原因 O/R 映射器(或您使用的任何技术)无法处理枚举值,则可以创建一个 int 属性来转换枚举:

// Do not map!
public TimeFrame TimeFrame { get; set; }
// Map!
public int TimeFrameInt {
    get { return (int)TimeFrame; }
    set { TimeFrame = (TimeFrame)value; }
}

int 和枚举之间的转换只是用强制转换完成的;不需要 switch 语句。这是可能的,而且非常快,因为枚举由引擎盖下的整数表示。

最新更新