我正在为我的Azure移动应用程序使用 MobileServiceSQLiteStore (离线同步) .
MobileServiceSQLiteStore
我输入've noticed that data/columns I'作为 decimal 被存储在本地SQLite数据库中 float
decimal
float
确保正确类型的正确方法是什么?
作为MobileServiceSQLiteStore.cs下的 DefineTable 方法,它将使用以下代码检索本地表定义,如下所示:
DefineTable
var tableDefinition = (from property in item.Properties() let storeType = SqlHelpers.GetStoreType(property.Value.Type, allowNull: false) select new ColumnDefinition(property.Name, property.Value.Type, storeType)) .ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase);
SqlHelpers.cs下的 GetStoreType 方法将根据JToken类型转换商店类型 . 我已检查并发现您在模型中定义的两种类型( double , float , decimal )都将转换为 ColumnType.Float .
GetStoreType
double
ColumnType.Float
如Datatypes In SQLite所述:
SQLite使用更通用的动态类型系统 . 在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联 . SQLite的动态类型系统向后兼容其他数据库引擎的更常见的静态类型系统,因为在静态类型数据库上工作的SQL语句应该在SQLite中以相同的方式工作 . 但是,SQLite中的动态类型允许它执行传统的刚性类型数据库中无法实现的操作 .
根据我的理解,您可以在创建表时为列声明特定的数据类型,并且可以将任何类型的数据类型存储到此列中 . 根据我的测试,我可以正确插入/检索我的项目 . 我假设您可以忽略此问题,或者您可以尝试覆盖 MobileServiceSQLiteStore 以实现您的目的 .
1 回答
作为MobileServiceSQLiteStore.cs下的
DefineTable
方法,它将使用以下代码检索本地表定义,如下所示:SqlHelpers.cs下的
GetStoreType
方法将根据JToken类型转换商店类型 . 我已检查并发现您在模型中定义的两种类型(double
,float
,decimal
)都将转换为ColumnType.Float
.如Datatypes In SQLite所述:
根据我的理解,您可以在创建表时为列声明特定的数据类型,并且可以将任何类型的数据类型存储到此列中 . 根据我的测试,我可以正确插入/检索我的项目 . 我假设您可以忽略此问题,或者您可以尝试覆盖
MobileServiceSQLiteStore
以实现您的目的 .