ORMには、SQLite列に日付のタイムまたはブール豆が含まれていると判断する方法がありますか?
質問
私は次のプロジェクトにsqliteを使用することを考えてきましたが、適切でないように思われます datetime
と bit
データ型。
DBLINQ(または他のORM)を使用してC#クラスを生成する場合、プロパティのデータ型は「馬鹿げている」のでしょうか?日付データはタイプのプロパティに配置されます string
また double
?ブールデータはタイプのプロパティに配置されます int
?
はいの場合、その意味は何ですか?より具体的なデータ型を備えたクラスの2番目のレイヤーを書いて、多くの変換とキャストを行う必要があるシナリオを想定していますが、恐れほど悪くないかもしれません。これや同様のシナリオの経験がある場合、どのように処理しましたか?
解決
SQLite自体は、5つのデータ型のみを認識しています。 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の設計ツールから、DateTimeおよびBITデータ型を提供します。私はdblinqについてあまり考えていませんが。ただし、DateTimeおよびBITデータタイプはSQLLITEでサポートされています
system.data.sqlite ADO.NETプロバイダーにはaが含まれます SQLITEMETADATACOLLECTIONNAMES 特定のテーブル内の列に関するさまざまなメタデータを取得できるクラス。
各列の「ヒント」データ型(SQLiteが厳格なタイピングを強制しない)を記述する「データ型」プロパティが含まれます。これを使用すると、ORMが同等のC#タイプに必要な変換を実行できます。
Zend FrameworkでSQLite用のアダプターに取り組みました。
SQLiteテーブルのメタデータとデータ型を取得するために、私は使用しました PRAGMA TABLE_INFO( <tablename> )
そして、その出力を解析しました。