Sarebbe un ORM hanno alcun modo di determinare che una colonna SQLite contiene data-tempi o booleani?
Domanda
Ho pensato di usare SQLite per il mio prossimo progetto, ma sono preoccupato che sembra mancare i tipi di dati e datetime
bit
corrette.
Se uso DbLinq (o qualche altro ORM) per generare classi C #, saranno i tipi di dati delle proprietà essere "storditi"? Saranno dati data-ora essere messi in proprietà di tipo string
o double
? Sarà boolean dati essere collocati nelle proprietà di tipo int
?
Se sì, quali sono le implicazioni? Sto immaginando uno scenario in cui ho bisogno di scrivere un intero secondo strato di classi con tipi di dati più specifici e fare un po 'di trasformazioni e fusioni, ma forse non è così male come temo. Se avete qualche esperienza con questo o uno scenario simile, come hai fatto a gestire la cosa?
Soluzione
SQLite si riconosce solo cinque tipi di dati: NULL
, INTEGER
, REAL
, TEXT
, e BLOB
. Ma vi permette di dichiarare qualsiasi nome tipo che si desidera, in modo da poter scrivere
CREATE TABLE SomeTable (
TimeAdded DATETIME,
SomeFlag BOOLEAN
);
e avere il vostro ORM interpretare i tipi di strada che si desidera.
Ho scritto un wrapper C ++ intorno SQLite, e ha preso il diverso approccio di rappresentare tutti i valori di database con un tipo di variante. Questa variante prevede conversioni tra diversi tipi, così SqlValue("2010-05-03 01:01:04").AsTimestamp()
conferisce all'oggetto timestamp previsto.
Altri suggerimenti
System.Data.SQLite e dagli strumenti di Design a VS2008, mi dà DateTime e il tipo di dati Bit. Anche se io non ho molta idea su DbLinq. Ma DateTime e Bit tipi di dati sono supportati da SqlLite
Il provider System.Data.SQLite ADO.NET contiene un SQLiteMetaDataCollectionNames classe che consente di recuperare i vari meta -data sulle colonne di una tabella specifica.
E 'include una proprietà 'DataTypes' che descrive il tipo di dati 'suggerimento'(SQLite non applica la tipizzazione forte) di ogni colonna. Usando questo permetterebbe un ORM per poi eseguire la conversione necessaria da / per il tipo equivalente C #.
Ho lavorato su un adattatore per SQLite in Zend Framework.
Per ottenere metadati e tipi di dati per una tabella SQLite, ho usato PRAGMA TABLE_INFO( <tablename> )
e analizzata la sua uscita.