Сохранить перечисление как строку в базе данных
Я экспериментирую с dapper. У меня есть класс, который имеет перечисление, и значения хранятся в виде строк в базе данных.
Это работает с FluentNHibernate, используя GenericEnumMapper
Можно ли сделать то же самое с Dapper?
Ответы
Ответ 1
В настоящий момент это не построено, здесь предлагается предлагаемое решение: http://code.google.com/p/dapper-dot-net/issues/detail?id=24, о котором мы еще не можем решить, Мне нравится идея расширительных преобразователей типа
В самом деле, самый чистый способ сделать это - определить свойство тени, например:
class MyType
{
public MyEnum MyEnum {get; private set;}
private string DBEnum { set { MyEnum = Convert(value);} }
private MyEnum Convert(string val)
{
// TODO: Write me
}
}
// cnn.Query<MyType>("select 'hello' as DBEnum") <-- will set MyEnum
Ответ 2
Из образца кода, который я только что попробовал, он выглядит не так. Вы можете перечислить перечисление в его базовое целочисленное значение, но если вы попытаетесь сопоставить его с его строковым значением, то будет сброшен DataException
.
Ответ 3
Другим решением может быть использование новой расширяемости ITypeMap, хотя она все еще остается многословной.
fooobar.com/info/52422/...
Сопоставьте поле Uri с помощью Dapper