当前位置: 首页 > 面试题库 >

将按位枚举映射到sql列值

龚苏燕
2023-03-14
问题内容

我有一个FlagsAttribute按位枚举,像这样-

[FlagsAttribute]
public enum MyEnum
{
    None = 0,
    First = 1,
    Second = 2,
    Third = 4,
    Five = 8,
    Six = 16,
    Seven = 32,
    Eight = 64,
    Nine = 128
}

现在,在C#中,我将此值存储在一个名为MyProperty的属性中,并保存后将此属性写入我的SQL数据库的整数列中。假设如果我First,Second,Five从代码中选择,那么它将在数据库中另存为'11'

我知道我可以从数据库获取值,只需要将int值类型转换为MyEnum,它将为我提供这些值。但是,我希望对某些存储过程中的SQL数据执行一些操作,在这些存储过程中,显然不能将其转换为Enum值。因此,是否有办法让我知道各个价值观。

像在示例中,如果存储了11,我可以通过任何方式获取它 "1+2+8"


问题答案:

这可能有助于您入门:

Select 11 & 1 As 'First'
  , 11 & 2 As 'Second'
  , 11 & 4 As 'Third'
  , 11 & 8 As 'Five'
  , 11 & 16 As 'Six'
  , 11 & 32 As 'Seven'
  , 11 & 64 As 'Eight'
  , 11 & 128 As 'Nine';

11您的储值在哪里。

这将返回该被设置的每个值的非零值(即Select 11 & 1 As 'First'返回1Select 11 & 2 As 'Second'返回图2,Select 11 & 4 As 'Third'返回0等。



 类似资料:
  • 我需要将枚举列表映射到Postgres中的表。 对于1:1关系的一般映射,我发现这篇文章非常有用。代码如下所示: 但是如果是一个,那么我就可以轻松地找到一个解决方案。因为定义失败了。 为了使其具体化:我有一个表,例如,我可以在其中存储和。为了示例起见,我可以存储多个(例如,基于时间的)。那么如何正确地定义它,如果我有 以同样的方式定义它的方法会导致异常(这似乎很清楚,因为注释是针对而不是针对)

  • 问题内容: 假设我有这个枚举: 通过以下映射: 枚举被发送到数据库,,。我希望这些值改为存储为,或存储在varchar列中。 如何将枚举映射到varchar列? 问题答案: 将其添加为EnumType的参数: 这是因为等效于java.sql.Types.VARCHAR

  • 我有一个实体,有一个枚举类型字段和一个具有相同枚举类型和字段名的DTO。 我使用modelMapper创建一个新对象,不需要额外的配置。 但在将dto映射到实体对象后,实体对象上的性别为空。 对象有性别,我已经检查了很多。 请帮我理解这个问题。

  • 问题内容: 我需要预先将未实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate本身是否支持此功能?)。 问题答案: 可以创建一个自定义(例如thi

  • 问题内容: Hibernate提供的注释支持使用或的两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即hibernate尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了

  • 实体类如下: 是否有任何方法可以将实体中的Transstatus列映射到枚举的整数值,即状态代码,例如,如果我有枚举值作为NOT_FOUND实体中的Transstatus值应该是12, 编辑请注意,我有两个枚举状态码的值,状态码字符串,我们想要的只是状态码,我们已经用“Ordinal”尝试过了,它打印枚举的整数值,而不是我示例中的状态码