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

Commit

Permalink
Fix reading scalar enums
Browse files Browse the repository at this point in the history
  • Loading branch information
mythz committed Nov 24, 2015
1 parent 6f2f69e commit c8745eb
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
9 changes: 9 additions & 0 deletions src/ServiceStack.OrmLite/Converters/SpecialConverters.cs
Expand Up @@ -38,6 +38,15 @@ public override object ToDbValue(Type fieldType, object value)

return enumValue;
}

public override object FromDbValue(Type fieldType, object value)
{
var strVal = value as string;
if (strVal != null)
return Enum.Parse(fieldType, strVal, ignoreCase:true);

return Convert.ChangeType(value, fieldType.GetTypeCode());
}
}

public class RowVersionConverter : OrmLiteConverter
Expand Down
2 changes: 1 addition & 1 deletion src/ServiceStack.OrmLite/OrmLiteReadCommandExtensions.cs
Expand Up @@ -680,7 +680,7 @@ internal static T ToScalar<T>(IOrmLiteDialectProvider dialectProvider, IDataRead
if (underlyingType == typeof(object))
return (T)reader.GetValue(0);

var converter = dialectProvider.GetConverter(underlyingType);
var converter = dialectProvider.GetConverterBestMatch(underlyingType);
if (converter != null)
{
object oValue = converter.GetValue(reader, columnIndex);
Expand Down
39 changes: 39 additions & 0 deletions tests/ServiceStack.OrmLite.Tests/EnumTests.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using ServiceStack.DataAnnotations;
using ServiceStack.Text;

namespace ServiceStack.OrmLite.Tests
Expand Down Expand Up @@ -278,6 +279,44 @@ public void Can_Select_Type_with_Nullable_Enum()
Assert.That(row.Id, Is.EqualTo(2));
}
}

[Test]
public void Can_get_Scalar_Enum()
{
using (var db = OpenDbConnection())
{
db.DropAndCreateTable<TypeWithEnum>();

var row = new TypeWithEnum { Id = 1, EnumValue = SomeEnum.Value2 };
db.Insert(row);

var someEnum = db.Scalar<SomeEnum>(db.From<TypeWithEnum>()
.Where(o => o.Id == row.Id)
.Select(o => o.EnumValue));

Assert.That(someEnum, Is.EqualTo(SomeEnum.Value2));
}
}

[Test]
public void Can_get_Scalar_Enum_Flag()
{
using (var db = OpenDbConnection())
{
db.DropAndCreateTable<TypeWithFlagsEnum>();

var row = new TypeWithFlagsEnum { Id = 1, Flags = FlagsEnum.FlagTwo };
db.Insert(row);

row.PrintDump();

var flagsEnum = db.Scalar<FlagsEnum>(db.From<TypeWithFlagsEnum>()
.Where(o => o.Id == row.Id)
.Select(o => o.Flags));

Assert.That(flagsEnum, Is.EqualTo(FlagsEnum.FlagTwo));
}
}
}


Expand Down

0 comments on commit c8745eb

Please sign in to comment.