我有一个这样的枚举类:
public enum MessageType
{
ActiveType,
ErrorType,
SuccessType
}
我有一个具有该枚举的类,如下所示。
public partial class Message
{
public int MessageId { get; set; }
public MessageType MessageType { get; set; }
public int Version { get; set; }
}
我想基于Message类创建一个sql server表。
Create table Message
(messageId int,
Version int)
如何为枚举条目插入列以创建sql表?
我正在根据代码创建表。
答案 0 :(得分:3)
enum
是值类型,因此您可以执行此操作
public enum MessageType : int
{
ActiveType=0,
ErrorType=1,
SuccessType=2
}
然后在Message表中创建一个列messageType int
Create table Message
(
messageId int,
messageType int,
Version int
)
您需要将MessageType
转换为整数并插入。
MessageType type= MessageType.ActiveType;
int dbtype = (int)type;
您可以将dbtype
插入表格
答案 1 :(得分:3)
您可以为Enum值创建一个Master表,然后将主键引用到另一个表。
create table MessageType
(
MessageTypeId int PRIMARY KEY,
MessageType varchar(25)
);
create table Message
(
MessageId int PRIMARY KEY,
MessageTypeId int,
Version int
);
创建此功能的好处是,如果系统扩展,您将来可以引入新的消息类型,并且不会产生任何问题。
答案 2 :(得分:2)
枚举的重点在于它们只是引擎盖下的数字,因此对于系统来说非常有效,但每个数字对应一个文本标签,因此它们对于人类开发人员来说非常有效。在您的情况下,您接受默认编号,这意味着每个字段都由int
表示,这些值是连续的,从0开始。这意味着ActiveType
,ErrorType
SuccessType
分别对应0,1和2。
如果您希望数据库列存储该数据,则需要一个列来存储数值,或者一个列来存储文本标签。选择是你的,但我会推荐前者。您可以在int
和MessageType
之间来回转换,这样您只需从数据库中检索int
值并转换为MessageType
即可加载到Message
个对象中。然后,您可以转回int
进行保存。
其中一个结果是您的数据库中只有数字值而没有文本标签。如果您希望能够直接查看数据库时查看这些数字的含义,只需添加一个包含与枚举相同的数字到文本关系的查找表。