将枚举存储到数据库的顺畅方式

时间:2015-01-01 17:25:03

标签: c# sql database enums sql-server-2014

我有一个 enum 就像这样。

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

当存储包含 TimeFrame 类型属性的对象时,使用开关语句进行转换,使每个值显式为1,2和3 。创建的命令字符串替换为例如晚上到3.从数据库中提取时相同 - 如果值为1,则将其手动并明确地映射到 Morning 。< / p>

是否有一种平滑的方式来存储枚举&#34;的值&#34;?或者我们应该出于某种原因避免这样做吗?

我尝试过直接的做法,但这只会给出回落价值......

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

// Do not map!
public TimeFrame TimeFrame { get; set; }

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

ints和enums之间的转换只需使用强制转换;不需要切换语句。这是可能的,而且速度非常快,因为枚举是由引擎盖下的整体表示的。