Хранить перечисление как строку в базе данных - PullRequest
16 голосов
/ 31 мая 2011

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

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

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

Ответы [ 3 ]

13 голосов
/ 01 июня 2011

Это не встроено в данный момент, здесь предлагается предлагаемое решение: 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 голосов
/ 01 июня 2011

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

0 голосов
/ 18 декабря 2012

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

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

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

...