【问题标题】:Azure Mobile/App Serive Offline Sync stores decimals as floatsAzure 移动/应用服务离线同步将小数存储为浮点数
【发布时间】:2018-04-18 01:45:43
【问题描述】:

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

我注意到我输入为 decimal 的数据/列正在以 float 的形式存储在本地 SQLite 数据库中

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

【问题讨论】:

    标签: c# azure azure-mobile-services


    【解决方案1】:

    作为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 以实现您的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多