Будет ли у ORM какой-либо способ определить, что столбец SQLite содержит время времени или логики?
Вопрос
Я думал об использовании SQLite для моего следующего проекта, но я обеспокоен тем, что, похоже, ему не хватает datetime
и bit
типы данных.
Если я использую dblinq (или какой -то другой ORM) для генерации классов C#, будут ли типы данных «глупо»? Будут ли данные о дате времени размещены в свойствах типа 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()
дает ожидаемый объект TimeMant.
Другие советы
я использую System.data.sqlite И из инструментов проектирования в VS2008 он дает мне тип данных DateTime и битовых данных. Хотя у меня мало идеи о dblinq. Но DateTime и битовые дата поддерживаются SQLLITE
А System.data.sqlite Поставщик ADO.net содержит SQLiteMetAdatacollectionNames Класс, который позволяет вам получить различные метадаты о столбцах в определенной таблице.
Он включает в себя свойство «Дататипы», которое описывает тип данных «подсказка» (SQLite не обеспечивает строгого типирования) каждого столбца. Использование этого позволило бы ORM выполнить требуемое преобразование в/из эквивалентного типа C#.
Я работал над адаптером для SQLite в Zend Framework.
Чтобы получить метаданные и типы данных для таблицы SQLite, я использовал PRAGMA TABLE_INFO( <tablename> )
и проанализировал свой выход.