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以您想要的方式解释类型。
我已经在sqlite周围编写了一个C ++包装器,并采用了用不同类型表示所有数据库值的不同方法。该变体提供了不同类型之间的转换,因此 SqlValue("2010-05-03 01:01:04").AsTimestamp()
给出预期的时间戳对象。
其他提示
我正在使用 system.data.sqlite 从VS2008中的设计工具中,它为我提供了数据类别和位数据类型。尽管我对DBLINQ的看法不多。但是DateTime和BIT数据类型由SQLLITE支持
这 system.data.sqlite ADO.NET提供商包含一个 SQLiteMetAdatAcollectionNames 可以让您检索有关特定表中列的各种元数据。
它包括一个“数据类型”属性,该属性描述了每列的“提示”数据类型(SQLite不强制键入)。使用此功能将允许ORM对等效C#类型进行所需的转换。
我在Zend Framework中为SQLite的适配器工作。
要获取sqlite表的元数据和数据类型,我使用了 PRAGMA TABLE_INFO( <tablename> )
并解析其输出。