Azure Mobile / App Serive Offline Sync将小数存储为浮点数

时间:2017-11-05 23:29:51

标签: c# azure azure-mobile-services

我使用MobileServiceSQLiteStore(离线同步)为我的Azure移动应用程序。

我注意到我输入decimal的数据/列被存储在本地SQLite数据库中float

确保正确类型的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

作为MobileServiceSQLiteStore.cs下的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类型转换商店类型。我检查过并发现您在模型中定义的列类型(doublefloatdecimal)都将转换为ColumnType.Float

Datatypes In SQLite所述:

  

SQLite使用更通用的动态类型系统。在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联。 SQLite的动态类型系统向后兼容其他数据库引擎的更常见的静态类型系统,因为在静态类型数据库上工作的SQL语句应该在SQLite中以相同的方式工作。但是,SQLite中的动态类型允许它执行传统刚性类型数据库中无法实现的操作。

根据我的理解,您可以在创建表时为列声明特定的数据类型,并且可以将任何类型的数据类型存储到此列中。根据我的测试,我可以正确插入/检索我的项目。我假设您可以忽略此问题,或者您可以尝试覆盖MobileServiceSQLiteStore以实现您的目的。