Dapper - Sql to Object неявное приведение из строки в int - PullRequest
5 голосов
/ 15 августа 2011

Я использую dapper и у меня возникают проблемы с приведением строкового значения из db в int.Кто-нибудь переопределил TypeMap, чтобы учесть это?

Любые предложения будут хороши.

1 Ответ

5 голосов
/ 16 августа 2011

Dapper требователен к типам, которые он отображает.Это защищает вас от всевозможных неприятных ошибок, которые появляются позже.

Например, ваша БД может вернуть:

  • 010hello
  • 10a10
  • 374837483748374837483748374834784378437438743874384738473

Нет четкого плана действий для сопоставления такого рода вещей с Int32

Тем не менее, есть две стратегии, которым вы можете следовать с помощью dapper, которые не требуют изменений в генерации IL.

Опция 1: свойство Shadow

class Foo
{
   public int Age 
   { 
      get 
      { 
       int age; 
       int.TryParse(ageString, out age); 
       return age;  
      } 
   }
   string ageString;
}

\\ usage
cnn.Query<Foo>("select ageString from TableWithString");

Опция 2, приведение к SQL

cnn.Query<Bar>("select cast(ageString as int) Age from TableWithString");

Нет чистого способа расширить функциональность отображения в Dapper, если вы сделаете это, вы застрянете, нуждаясь в слиянии любых исправлений, которые мы со временем добавим в вашу локальную копию.

...