Будет ли ORM каким-либо способом определять, что столбец SQLite содержит дату-время или логическое значение? - PullRequest
6 голосов
/ 03 мая 2010

Я думал об использовании SQLite для моего следующего проекта, но я обеспокоен тем, что в нем отсутствуют правильные типы данных datetime и bit.

Если я использую DbLinq (или какой-либо другой ORM) для генерации классов C #, будут ли типы данных свойств "неактивны"? Будут ли данные даты и времени помещаться в свойства типа string или double? Будут ли логические данные помещены в свойства типа int?

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

Ответы [ 4 ]

1 голос
/ 03 мая 2010

SQLite распознает только пять типов данных: NULL, INTEGER, REAL, TEXT и BLOB. Но он позволяет вам объявить любое имя типа, которое вы хотите, так что вы можете написать

CREATE TABLE SomeTable (
   TimeAdded DATETIME,
   SomeFlag  BOOLEAN
);

и ваш ORM будет интерпретировать типы так, как вы хотите.

Я написал оболочку C ++ для SQLite и использовал другой подход для представления всех значений базы данных с типом варианта. Этот вариант обеспечивает преобразования между различными типами, поэтому SqlValue("2010-05-03 01:01:04").AsTimestamp() дает ожидаемый объект отметки времени.

0 голосов
/ 03 мая 2010

Я работал над адаптером для SQLite в Zend Framework.

Чтобы получить метаданные и типы данных для таблицы SQLite, я использовал PRAGMA TABLE_INFO( <tablename> ) и проанализировал его вывод.

0 голосов
/ 03 мая 2010

Поставщик System.Data.SQLite ADO.NET содержит класс SQLiteMetaDataCollectionNames , который позволяет получать различные метаданные о столбцах в конкретной таблице.

Включает свойство DataTypes, которое описывает тип данных «подсказка» (SQLite не требует строгой типизации) каждого столбца. Использование этого позволит ORM затем выполнить требуемое преобразование в / из эквивалентного типа C #.

0 голосов
/ 03 мая 2010

Я использую System.Data.SQLite и из средств разработки в VS2008 он дает мне тип данных DateTime и Bit. Хотя я не очень разбираюсь в DbLinq. Но типы данных DateTime и Bit поддерживаются SqlLite

...