Skip to main content

SQLite Data Types Mapping

  • 2 minutes to read

XPO creates these column types when updating the SQLite database schema and expects them in existing databases.

.NET Type Database Column Type
Boolean bit
Byte tinyint
SByte numeric(3,0)
Char nchar(1)
Decimal money
Double double
Single float
Int16 smallint
UInt16 numeric(5,0)
Int32 int
UInt32 numeric(10,0)
Int64 numeric(20,0)
UInt64 numeric(20,0)
Guid char(36)
String nvarchar
DateTime datetime
TimeSpan double
Byte[] image
Unlimited size string text

Type Conversion for Int64 and UInt64 Values

XPO converts System.Int64 and System.UInt64 values to decimal type values for SQLite. This can lead to errors. Refer the following topic for more information: Datatypes In SQLite.

To override this behavior, create an SQLiteConnectionProvider class descendant. In this descendant, override the ConvertToDbParameter method as follows:

using DevExpress.Xpo.DB;
using System.Data;

namespace MySqliteExtensions {
    public class CustomSQLiteConnectionProvider : SQLiteConnectionProvider {
        public CustomSQLiteConnectionProvider(IDbConnection connection, AutoCreateOption autoCreateOption) : base(connection, autoCreateOption) {
        }
        protected override object ConvertToDbParameter(object clientValue, TypeCode clientValueTypeCode) {
            switch (clientValueTypeCode) {
                case TypeCode.UInt64:
                    return (UInt64)clientValue;
                case TypeCode.Int64:
                    return (Int64)clientValue;
            }
            return base.ConvertToDbParameter(clientValue, clientValueTypeCode);
        }
    }
}

Use the newly created SQLiteConnectionProvider class descendant as a custom XPO connection provider.

Mapping Properties To Database Column Types Not Supported By Default

If a column type is not listed in the above table but can be converted to any of the listed type by the database, it can be read and modified by XPO. To create a column of a specific type in the database when updating the schema, decorate the property with DbTypeAttribute. If a column type cannot be converted to a supported type, it is possible to support such columns by creating a custom connection provider.

See Also