Неверное отображение типа поля SubSonic 2.2, SQLite 3 - PullRequest
2 голосов
/ 05 марта 2010

У меня есть поле типа логического (BOOL) в таблице SQLite. В сгенерированном DAL SubSonic он представлен как строка (вместо bool). Это странно. Как этим можно управлять? Пожалуйста помоги.

альтернативный текст http://dl.dropbox.com/u/3882061/sqlite.GIF

Ответы [ 2 ]

4 голосов
/ 05 марта 2010

Возможно, я ошибаюсь, я использовал Subsonic 2.2 только с SQL2008, но я бы порекомендовал посмотреть на источник для Subsonic, а именно SQLLiteDataProvider.cs и просмотреть функцию DbType.

Кажется, он распознает тип Boolean, но не Bool, и по умолчанию, когда он не распознает ваш тип, прибегает к String.

Заяц - это код этой функции

 switch(sqliteType.ToLowerInvariant())
            {
                case "text":
                case "char":
                case "nchar":
                case "varchar":
                case "nvarchar":
                    return DbType.String;
                case "boolean":
                case "bit":
                    return DbType.Boolean;
                case "bigint":
                case "int":
                case "integer":
                    return DbType.Int64;
                case "real":
                case "numeric":
                case "double":
                case "single":
                case "float":
                    return DbType.Single;
                case "smallint":
                    return DbType.Int16;
                case "date":
                case "time":
                case "datetime":
                case "smalldatetime":
                case "timestamp":
                    return DbType.DateTime;
                case "binary":
                case "blob":
                case "image":
                    return DbType.Binary;
                case "guid":
                    return DbType.Guid;
                default:
                    return DbType.String;
            }

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

1 голос
/ 06 марта 2010

Я зарегистрировал более новую версию провайдера в декабре с несколькими исправлениями ошибок, но, насколько я могу судить, он не включен в исходную загрузку - Роб не работает с sqlite, поэтому для него не является приоритетом объединить и проверить. Я рекомендую посмотреть мою версию, так как она исправила несколько ошибок для меня. У меня есть еще более новая версия, которая проходит практически все юнит-тесты, модифицированные для sqlite, но интересно, стоит ли ее загружать. Сложно было пройти тесты из-за ошибок блокировки базы данных и смещения сервера sql в коде ядра - sqlite имеет блокировку на уровне файлов. Модульные тесты не являются полным охватом.

Ссылка на мой SQLiteProvider.cs на github

В моей версии немного другой метод GetDbType, и я вижу, по какой-то непонятной причине, что я не включил bool или boolean как тип для преобразования, поэтому я добавлю это.

...