2010-05-03 3 views
6

Ich habe über die Verwendung von SQLite für mein nächstes Projekt nachgedacht, aber ich bin besorgt, dass es scheint, datetime und bit Datentypen zu fehlen.Wäre ein ORM in der Lage zu bestimmen, dass eine SQLite-Spalte date-times oder booleans enthält?

Wenn ich DbLinq (oder ein anderes ORM) zum Generieren von C# -Klassen verwende, werden die Datentypen der Eigenschaften "verdunkelt"? Werden Datum-Uhrzeit-Daten in Eigenschaften des Typs string oder double abgelegt? Werden boolesche Daten in Eigenschaften des Typs int platziert?

Wenn ja, was sind die Auswirkungen? Ich stelle mir ein Szenario vor, in dem ich eine ganze zweite Schicht von Klassen mit spezifischeren Datentypen schreiben und eine Reihe von Transformationen und Umwandlungen durchführen muss, aber vielleicht ist es nicht so schlimm, wie ich befürchte. Wenn Sie Erfahrung mit diesem oder einem ähnlichen Szenario haben, wie sind Sie damit umgegangen?

Antwort

1

SQLite selbst nur fünf Datentypen erkennt: NULL, INTEGER, REAL, TEXT und BLOB. Aber es lässt Sie jede Art Name deklarieren, die Sie wollen, so können Sie

CREATE TABLE SomeTable (
    TimeAdded DATETIME, 
    SomeFlag BOOLEAN 
); 

schreiben und Ihre ORM die Art, wie Sie wollen interpretieren.

Ich habe eine C++ - Wrapper um SQLite geschrieben, und nahm den unterschiedlichen Ansatz der Darstellung aller Datenbankwerte mit einem Variant-Typ. Diese Variante bietet Konvertierungen zwischen verschiedenen Typen, so dass SqlValue("2010-05-03 01:01:04").AsTimestamp() das erwartete Zeitstempelobjekt angibt.

+0

Nur die Verwendung von 'datetime' und' bit' als Datentypen haben den Trick mit DbLinq gemacht, danke. – devuxer

0

Ich verwende System.Data.SQLite und von Design-Tools in VS2008, gibt es mir DateTime und Bit-Datentyp. Obwohl ich nicht viel Ahnung von DbLinq habe. Aber Datetime und Bit-Datentypen werden von SqlLite unterstützt

0

Der ADO.NET-Anbieter System.Data.SQLite enthält eine SQLiteMetaDataCollectionNames-Klasse, mit der Sie die verschiedenen Metadaten zu den Spalten in einer bestimmten Tabelle abrufen können.

Es enthält eine Eigenschaft 'DataTypes', die den Datentyp 'Hinweis' für jede Spalte beschreibt (SQLite erzwingt keine strikte Typisierung). Wenn dies verwendet würde, würde ein ORM dann die erforderliche Umwandlung zu/von dem äquivalenten C# -Typ ausführen.

0

Ich arbeitete an einem Adapter für SQLite in Zend Framework.

Um Metadaten und Datentypen für eine SQLite-Tabelle zu erhalten, habe ich PRAGMA TABLE_INFO(<tablename>) verwendet und seine Ausgabe analysiert.

Verwandte Themen