Превосходное преобразование TinyInt - PullRequest
5 голосов
/ 12 января 2012

Я пытаюсь написать свой собственный DatabaseStorageBase для мини-профилировщика, и у меня возникают проблемы в моем

private List<T> LoadFor<T>(DbConnection conn, object idParameter)

метод. Dapper продолжает кричать на меня с

Error parsing column 5 (level=0 - SByte)

Я сохраняю уровень как tinyint(4), поэтому я предполагаю, что dapper не может преобразовать Tiny Int в нечто похожее на Enum (ProfileLevel)? Может кто-нибудь подсказать, как мне сохранить уровень в mysql, чтобы я мог решить мои проблемы с конверсией?

1 Ответ

2 голосов
/ 09 октября 2012

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

miniprofiler использует enum в качестве байта для MiniProfiler.Level и SqlTiming.ExecuteType использование для этого свойства типа tinyint возвращает недопустимое приведение, которое показывает, что вместо байта возвращается Sbyte. это поведение по умолчанию для mysql, так как оно разрешает возврат подписанного значения tinyint, где как sqlserver не так, как упомянуто здесь:

http://forums.mysql.com/read.php?38,5524,5581#msg-5581

http://social.msdn.microsoft.com/Forums/br/adonetefx/thread/8b0949ba-03e8-4637-baa1-d2b4ff0771f0

Следовательно, разрешение просто путем изменения поля tinyint уровня, а executeType в unsigned tinyint вернет правильное значение (приведенное к байту). теперь мое mysqlstorage работает как положено

...