2015-01-01 17 views
1

我有一个枚举像这样。顺利的方式来存储枚举到DB

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

TIMEFRAME存储包含类型的属性的对象,有使用开关语句使每个值明确为1,2,和3中创建的命令字符串是从例如取代的转换晚上为3.从DB中读取时相同 - 如果值为1,则将其手动映射到Morning

是否有顺利的方式来存储枚举值的值“原样”?或者我们应该避免这样做吗?

我试过直断的方法,但只给出了回退值一路...

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

Downvoter:小心帮助改善问题? –

+0

什么是行[[TimeFrame]]的类型,并且它会始终在数据库中有值还是可以存在为空? – musicfuel

+0

@musicfuel这是一个*枚举*。我挑战你把它设置为* null *。 :) –

回答

2

你可以施放枚举到整数,反之亦然,这是非常快的。你也可以在枚举和字符串之间进行转换,需要更多的代码,时间和存储空间。然后,您可以在数据库中平均存储整数或字符串。

+0

所以铸造是必须的.​​..?对铸造过敏... –

+0

我看不出为什么铸造可能是一个问题。 – fejesjoco

+0

当处理更“动态”的日期模型时,有时候会有一个痴迷的白痴在不改变依赖它的代码的情况下来回地改变类型。还有一些健忘的懒人不会通过try/catch语句保护演员。哦,最糟糕的部分 - 有时候,那些人是我......:D –

2

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

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

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

整数和枚举之间的转换简单地完成与演员;不需要switch语句。这是可能的并且非常快,因为枚举在引擎盖下以整数表示。