Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 37b7646

Browse files
authored
Merge pull request #527 from CormacBrennan-AI/master
Add logic to handle EnumAsInt attribute for Oracle databases
2 parents 3b86ff4 + 40f1862 commit 37b7646

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/ServiceStack.OrmLite.Oracle/Converters/OracleEnumConverter.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using ServiceStack.DataAnnotations;
23
using ServiceStack.OrmLite.Converters;
34

45
namespace ServiceStack.OrmLite.Oracle.Converters
@@ -7,6 +8,11 @@ public class OracleEnumConverter : EnumConverter
78
{
89
public override string ToQuotedString(Type fieldType, object value)
910
{
11+
if (fieldType.HasAttribute<EnumAsIntAttribute>())
12+
{
13+
return this.ConvertNumber(fieldType.GetEnumUnderlyingType(), value).ToString();
14+
}
15+
1016
if (value is int && !fieldType.IsEnumFlags())
1117
{
1218
value = fieldType.GetEnumName(value);
@@ -33,6 +39,15 @@ public override object ToDbValue(Type fieldType, object value)
3339
value = fieldType.GetEnumName(value);
3440
}
3541

42+
if (fieldType.HasAttribute<EnumAsIntAttribute>())
43+
{
44+
if (value is string)
45+
{
46+
value = Enum.Parse(fieldType, value.ToString());
47+
}
48+
return (int) value;
49+
}
50+
3651
var enumValue = DialectProvider.StringSerializer.SerializeToString(value);
3752
// Oracle stores empty strings in varchar columns as null so match that behavior here
3853
if (enumValue == null)
@@ -42,5 +57,19 @@ public override object ToDbValue(Type fieldType, object value)
4257
? null
4358
: enumValue;
4459
}
60+
61+
public override object FromDbValue(Type fieldType, object value)
62+
{
63+
return base.FromDbValue(fieldType, GetDbValue(fieldType, value));
64+
}
65+
66+
private static object GetDbValue(Type fieldType, object value)
67+
{
68+
if (!fieldType.IsEnum) return value;
69+
70+
var oracleValue = value as OracleValue;
71+
72+
return oracleValue == null ? value : Convert.ToInt32(value);
73+
}
4574
}
4675
}

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Reflection;
88
using System.Text;
99
using System.Text.RegularExpressions;
10+
using ServiceStack.DataAnnotations;
1011
using ServiceStack.OrmLite.Converters;
1112
using ServiceStack.OrmLite.Oracle.Converters;
1213
using ServiceStack.Text;
@@ -426,7 +427,7 @@ public override object ToDbValue(object value, Type type)
426427
if (value == null || value is DBNull)
427428
return null;
428429

429-
if (type.IsEnum)
430+
if (type.IsEnum && !type.HasAttribute<EnumAsIntAttribute>())
430431
return EnumConverter.ToDbValue(type, value);
431432

432433
if (type.IsRefType())

0 commit comments

Comments
 (0)