【问题标题】:Enum class value inside a table表中的枚举类值
【发布时间】:2018-04-24 01:34:38
【问题描述】:

我有一个这样的枚举类:

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

我正在根据查看代码创建表格。

【问题讨论】:

  • “我有一个枚举类”。不,你没有。枚举(“枚举”的缩写)是一个枚举。枚举是一等类型,就像类和结构一样。实际上,枚举是一种值类型,因此,如果您要将其误认为是其他东西,请将其误认为是结构,而不是类。

标签: c# sql .net sql-server


【解决方案1】:

您可以为 Enum 值创建一个主表,然后将主键引用到另一个表。

create table MessageType
(
  MessageTypeId int PRIMARY KEY,
  MessageType varchar(25)
);

create table Message 
(
  MessageId int PRIMARY KEY,
  MessageTypeId int,
  Version int
);

创建它的好处是,如果您的系统扩展,您可以在将来引入新的消息类型,并且不会产生任何问题。

【讨论】:

    【解决方案2】:

    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 插入到您的表中

    【讨论】:

      【解决方案3】:

      枚举的意义在于它们只是底层的数字,因此对系统来说非常有效,但是每个数字对应一个文本标签,因此对于人类开发人员来说它们是非常有效的。在您的情况下,您接受默认编号,这意味着每个字段由 int 表示,并且这些值是连续的并且从 0 开始。这意味着 ActiveTypeErrorTypeSuccessType 对应于分别为 0、1 和 2。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-18
        • 1970-01-01
        • 2012-03-19
        相关资源
        最近更新 更多