表中的枚举类值

时间:2018-04-24 01:34:38

标签: c# sql .net sql-server

我有一个这样的枚举类:

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表?

我正在根据代码创建表。

3 个答案:

答案 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开始。这意味着ActiveTypeErrorType SuccessType分别对应0,1和2。

如果您希望数据库列存储该数据,则需要一个列来存储数值,或者一个列来存储文本标签。选择是你的,但我会推荐前者。您可以在intMessageType之间来回转换,这样您只需从数据库中检索int值并转换为MessageType即可加载到Message个对象中。然后,您可以转回int进行保存。

其中一个结果是您的数据库中只有数字值而没有文本标签。如果您希望能够直接查看数据库时查看这些数字的含义,只需添加一个包含与枚举相同的数字到文本关系的查找表。