ormlite servicestack中的枚举和标志支持

时间:2013-12-20 20:53:21

标签: servicestack ormlite-servicestack

由于我的错误消息:

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

Additional information: Conversion failed when converting the nvarchar value 'AB' to data type int.

我有一个带有AB值的枚举,我想将其保存为整数而不是nvarchar值。 我有一个带有flags属性的枚举,例如: [旗]

public enum VisibleDayOfWeek : int
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
}

我无法在数据库中保存多天字符串,但我可以保存代表多天的标志值的总和。

我不想在这些枚举属性周围创建一个整数包装器。

枚举的基础类型是字节或整数,那么为什么它保存为字符串/ varchar?这是没有意义的。甚至实体框架在多年后也得到了enum支持......

这种情况下的解决方案是什么?

似乎这家伙有同样的问题:https://github.com/tapmantwo/enumflags

2 个答案:

答案 0 :(得分:5)

据我所知,ormlite版本3不支持枚举,谁知道下一个版本。任何方式你的解决方案只是使用整数包装

public int VisibleDayOfWeek { get; set; }

[Ignored]
public VisibleDayOfWeek VisibleDayOfWeekEnum
{
    get { return (VisibleDayOfWeek)VisibleDayOfWeek; }
    set { VisibleDayOfWeek = (int)value; }
}
  

即使是实体框架在多年后的枚举支持下也是正确的

实体框架在版本>之后具有枚举支持4,你也不应该期望很多实体框架具有丰富的特色,而ormlite就像它的名字'lite'一样。

答案 1 :(得分:4)

延迟回答,但在 v4.0.8 中,[Flags]属性已添加到枚举中,这使得ServiceStack 始终将emum视为int。

From v4.0.54您现在也可以使用[EnumAsInt]属性将枚举保存到数据库作为OrmLite中的int,但在序列化时它将以字符串形式执行。