Sarebbe un ORM hanno alcun modo di determinare che una colonna SQLite contiene data-tempi o booleani?

StackOverflow https://stackoverflow.com/questions/2755915

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top