ORM 有什么方法可以确定 SQLite 列包含日期时间或布尔值吗?
我一直在考虑在下一个项目中使用 SQLite,但我担心它似乎缺乏正确的 datetime
和 bit
数据类型。
如果我使用 DbLinq(或其他一些 ORM)生成 C# 类,属性的数据类型是否会“简化”?日期时间数据是否会放置在 string
或 double
类型的属性中?布尔数据会被放置在 int
类型的属性中吗?
如果是,有什么影响?我正在设想一个场景,我需要编写具有更具体数据类型的整个第二层类,并进行一系列转换和转换,但也许它并不像我担心的那么糟糕。如果您有过这样或类似情况的经验,您是如何处理的?
I've been thinking about using SQLite for my next project, but I'm concerned that it seems to lack proper datetime
and bit
data types.
If I use DbLinq (or some other ORM) to generate C# classes, will the data types of the properties be "dumbed down"? Will date-time data be placed in properties of type string
or double
? Will boolean data be placed in properties of type int
?
If yes, what are the implications? I'm envisioning a scenario where I need to write a whole second layer of classes with more specific data types and do a bunch of transformations and casts, but maybe it's not as bad as I fear. If you have any experience with this or a similar scenario, how did you handle it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
SQLite 本身只识别五种数据类型:
NULL
、INTEGER
、REAL
、TEXT
和BLOB< /代码>。但它允许您声明您想要的任何类型名称,因此您可以
按照您想要的方式编写并让 ORM 解释类型。
我已经围绕 SQLite 编写了一个 C++ 包装器,并采用不同的方法用变体类型表示所有数据库值。此变体提供不同类型之间的转换,因此
SqlValue("2010-05-03 01:01:04").AsTimestamp()
给出预期的时间戳对象。SQLite itself recognizes only five data types:
NULL
,INTEGER
,REAL
,TEXT
, andBLOB
. But it lets you declare any type name that you want, so you can writeand have your ORM interpret the types the way you want to.
I've written a C++ wrapper around SQLite, and took the different approach of representing all database values with a variant type. This variant provides conversions between different types, so
SqlValue("2010-05-03 01:01:04").AsTimestamp()
gives the expected timestamp object.我正在使用 System.Data.SQLite 并通过 VS2008 中的设计工具,它为我提供了日期时间和位数据类型。虽然我对 DbLinq 不太了解。但 SqlLite 支持 DateTime 和 Bit 数据类型
I'm using System.Data.SQLite and from Design tools in VS2008, it gives me DateTime and Bit data type. Although I've not much idea about DbLinq. But DateTime and Bit datatypes are supported by SqlLite
System.Data.SQLite ADO.NET 提供程序包含一个 SQLiteMetaDataCollectionNames 类,允许您检索有关的各种元数据特定表中的列。
它包括一个“DataTypes”属性,用于描述每列的“提示”数据类型(SQLite 不强制执行严格的类型)。使用此功能将允许 ORM 执行与等效 C# 类型之间所需的转换。
The System.Data.SQLite ADO.NET provider contains a SQLiteMetaDataCollectionNames class that allows you to retrieve the various meta-data about the columns in a specific table.
It includes a 'DataTypes' property that describes the 'hint' data type (SQLite doesn't enforce strict typing) of each column. Using this would allow an ORM to then perform the required conversion to/from the equivalent C# type.
我在 Zend Framework 中开发了 SQLite 适配器。
为了获取 SQLite 表的元数据和数据类型,我使用了
PRAGMA TABLE_INFO()
并解析其输出。I worked on an adapter for SQLite in Zend Framework.
To get metadata and data types for an SQLite table, I used
PRAGMA TABLE_INFO( <tablename> )
and parsed its output.