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,但我担心它似乎缺少正确的 datetimebit 数据类型。

如果我使用 DbLinq(或其他一些 ORM)来生成 C# 类,属性的数据类型会被“简化”吗?日期时间数据是否会放置在 stringdouble 类型的属性中?布尔数据是否会放置在 int 类型的属性中?

如果是,有什么影响?我正在设想一个场景,我需要编写具有更具体数据类型的整个第二层类,并进行大量转换和强制转换,但也许它没有我担心的那么糟糕。如果您对这种情况或类似情况有任何经验,您是如何处理的?

【问题讨论】:

【参考方案1】:

SQLite 本身只识别五种数据类型:NULLINTEGERREALTEXTBLOB。但是它可以让你声明任何你想要的类型名称,所以你可以写

CREATE TABLE SomeTable (
   TimeAdded DATETIME,
   SomeFlag  BOOLEAN
);

并让您的 ORM 以您想要的方式解释类型。

我已经围绕 SQLite 编写了一个 C++ 包装器,并采用了不同的方法来表示具有变体类型的所有数据库值。这个变体提供了不同类型之间的转换,所以SqlValue("2010-05-03 01:01:04").AsTimestamp() 给出了预期的时间戳对象。

【讨论】:

仅使用 datetimebit 作为数据类型就可以使用 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? [关闭]

Sqlite C# ORM 代码生成的任何建议 [关闭]

任何 .NET ORM 是不是支持开箱即用的本地化实体?

Django ORM - 我可以使用 ID 以外的其他列创建具有外键的新对象吗?

CoreData/SQLite 确定字段是不是以特定字符串结尾的最快方法

sqlite上的重复索引,而不是mysql