Сохранить перечисление как строку в базе данных

Я экспериментирую с dapper. У меня есть класс с перечислением, и значения хранятся в виде строк в базе данных.

Это работает с FluentNHibernate с использованием GenericEnumMapper.

Можно ли сделать то же самое с Dapper?


person Yavor Shahpasov    schedule 31.05.2011    source источник


Ответы (3)


На данный момент это не встроено, здесь предлагается решение для этого: 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
person Sam Saffron    schedule 01.06.2011

Из примера кода, который я только что попробовал, это не так. Вы можете сопоставить перечисление с его базовым целочисленным значением, но если вы попытаетесь сопоставить его со строковым значением, будет выброшено DataException.

person adrianbanks    schedule 31.05.2011

Другим решением может быть использование новой расширяемости ITypeMap, хотя она все еще немного многословна для реализации.

https://stackoverflow.com/a/12615036/444917

Сопоставление поля Uri с помощью Dapper

person Clay    schedule 18.12.2012