ORM 是不是有任何方法可以确定 SQLite 列是不是包含日期时间或布尔值?
Posted
技术标签:
【中文标题】ORM 是不是有任何方法可以确定 SQLite 列是不是包含日期时间或布尔值?【英文标题】:Would an ORM have any way of determining that a SQLite column contains date-times or booleans?ORM 是否有任何方法可以确定 SQLite 列是否包含日期时间或布尔值? 【发布时间】:2010-05-03 03:04:11 【问题描述】:我一直在考虑在我的下一个项目中使用 SQLite,但我担心它似乎缺少正确的 datetime
和 bit
数据类型。
如果我使用 DbLinq(或其他一些 ORM)来生成 C# 类,属性的数据类型会被“简化”吗?日期时间数据是否会放置在 string
或 double
类型的属性中?布尔数据是否会放置在 int
类型的属性中?
如果是,有什么影响?我正在设想一个场景,我需要编写具有更具体数据类型的整个第二层类,并进行大量转换和强制转换,但也许它没有我担心的那么糟糕。如果您对这种情况或类似情况有任何经验,您是如何处理的?
【问题讨论】:
【参考方案1】:SQLite 本身只识别五种数据类型:NULL
、INTEGER
、REAL
、TEXT
和 BLOB
。但是它可以让你声明任何你想要的类型名称,所以你可以写
CREATE TABLE SomeTable (
TimeAdded DATETIME,
SomeFlag BOOLEAN
);
并让您的 ORM 以您想要的方式解释类型。
我已经围绕 SQLite 编写了一个 C++ 包装器,并采用了不同的方法来表示具有变体类型的所有数据库值。这个变体提供了不同类型之间的转换,所以SqlValue("2010-05-03 01:01:04").AsTimestamp()
给出了预期的时间戳对象。
【讨论】:
仅使用datetime
和 bit
作为数据类型就可以使用 DbLinq,谢谢。【参考方案2】:
我正在使用System.Data.SQLite 和 VS2008 中的设计工具,它为我提供了 DateTime 和 Bit 数据类型。虽然我对 DbLinq 不太了解。但是 SqlLite 支持 DateTime 和 Bit 数据类型
【讨论】:
【参考方案3】:System.Data.SQLite ADO.NET 提供程序包含一个SQLiteMetaDataCollectionNames 类,允许您检索有关特定表中列的各种元数据。
它包含一个“DataTypes”属性,用于描述每列的“提示”数据类型(SQLite 不强制执行严格类型)。使用这将允许 ORM 执行所需的与等效 C# 类型之间的转换。
【讨论】:
【参考方案4】:我在 Zend 框架中为 SQLite 开发了一个适配器。
为了获取 SQLite 表的元数据和数据类型,我使用了PRAGMA TABLE_INFO( <tablename> )
并解析了它的输出。
【讨论】:
以上是关于ORM 是不是有任何方法可以确定 SQLite 列是不是包含日期时间或布尔值?的主要内容,如果未能解决你的问题,请参考以下文章
支持 UPSERT 的 Android SQLite ORM? [关闭]
Django ORM - 我可以使用 ID 以外的其他列创建具有外键的新对象吗?