Я думал об использовании SQLite для моего следующего проекта, но я обеспокоен, что этому, кажется, недостает надлежащий datetime
и bit
типы данных.
Если я использую DbLinq (или некоторый другой ORM) для генерации классов C#, будут типы данных свойств быть "dumbed вниз"? Будет данные даты и времени быть помещенными в свойства типа string
или double
? Будет булевы данные быть помещенными в свойства типа int
?
Если да, каковы последствия? Я предполагаю сценарий, где я должен записать целый второй слой классов с более определенными типами данных и сделать набор преобразований и бросков, но возможно это не настолько плохо, как я боюсь. Если у Вас есть опыт с этим или подобным сценарием, как Вы обрабатывали его?
Сам SQLite распознает только пять типов данных: NULL
, INTEGER
, REAL
, TEXT
и BLOB
]. Но он позволяет вам объявить любое имя типа, которое вы хотите, поэтому вы можете написать
CREATE TABLE SomeTable (
TimeAdded DATETIME,
SomeFlag BOOLEAN
);
и ваш ORM интерпретирует типы так, как вы хотите.
Я написал оболочку C ++ для SQLite и использовал другой подход, представляя все значения базы данных с помощью вариантного типа. Этот вариант обеспечивает преобразование между различными типами, поэтому SqlValue ("2010-05-03 01:01:04"). AsTimestamp ()
дает ожидаемый объект отметки времени.
Поставщик ADO.NET System.Data.SQLite содержит класс SQLiteMetaDataCollectionNames , который позволяет получать различные метаданные о столбцах в определенной таблице.
Он включает свойство DataTypes, которое описывает тип данных «подсказка» (SQLite не требует строгой типизации) каждого столбца. Использование этого позволит ORM выполнить необходимое преобразование в / из эквивалентного типа C #.
Я использую System.Data.SQLite , и из инструментов дизайна в VS2008 он дает мне тип данных DateTime и Bit. Хотя я не очень разбираюсь в DbLinq. Но типы данных DateTime и Bit поддерживаются SqlLite
Я работал над адаптером для SQLite в Zend Framework.
Чтобы получить метаданные и типы данных для таблицы SQLite, я использовал PRAGMA TABLE_INFO (
и проанализировал его вывод.