Я экспериментирую с dapper. У меня есть класс с перечислением, и значения хранятся в виде строк в базе данных.
Это работает с FluentNHibernate с использованием GenericEnumMapper.
Можно ли сделать то же самое с Dapper?
Я экспериментирую с dapper. У меня есть класс с перечислением, и значения хранятся в виде строк в базе данных.
Это работает с FluentNHibernate с использованием GenericEnumMapper.
Можно ли сделать то же самое с Dapper?
На данный момент это не встроено, здесь предлагается решение для этого: 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
Из примера кода, который я только что попробовал, это не так. Вы можете сопоставить перечисление с его базовым целочисленным значением, но если вы попытаетесь сопоставить его со строковым значением, будет выброшено DataException
.
Другим решением может быть использование новой расширяемости ITypeMap, хотя она все еще немного многословна для реализации.
https://stackoverflow.com/a/12615036/444917
Сопоставление поля Uri с помощью Dapper