C# Azure表存储没有';不能在实体定义中保存所有内容

C# Azure表存储没有';不能在实体定义中保存所有内容,c#,azure-storage,azure-table-storage,C#,Azure Storage,Azure Table Storage,这与我计划保存在Azure表存储(ATS)中的实体相同: 并非所有属性都是必需的。记录的填充取决于用户将要保存的选择(例如,这是一个CarEntity-如果用户订购了wheels,则填充属性WheelSize和WheelQuantity,如果用户要求重新绘制,则填充重新绘制颜色等等) 假设此实体中有60个属性,并非所有属性都保存在ATS中。尽管定义了一个属性并且没有返回任何错误,但该数据不会保存在表中。我知道每个实体有1MB的限制,但是考虑到我们已经做的计算,它有点远离1MB的限制 有任何帮助说

这与我计划保存在Azure表存储(ATS)中的实体相同:

并非所有属性都是必需的。记录的填充取决于用户将要保存的选择(例如,这是一个CarEntity-如果用户订购了wheels,则填充属性WheelSize和WheelQuantity,如果用户要求重新绘制,则填充重新绘制颜色等等)

假设此实体中有60个属性,并非所有属性都保存在ATS中。尽管定义了一个属性并且没有返回任何错误,但该数据不会保存在表中。我知道每个实体有1MB的限制,但是考虑到我们已经做的计算,它有点远离1MB的限制

有任何帮助说明为什么即使相应地保存了属性,列也不会显示吗?我的保存功能定义如下:

    public static CarEntity CarInsertOrReplace(CarEntity entity)        
    {
        if (entity == null)
        {
            throw new ArgumentNullException("entity");
        }

        var table = SetupTable(entity.TableName);
        table.CreateIfNotExists();

        TableOperation insertOrMergeOperation = TableOperation.InsertOrReplace(entity);

        TableResult result = table.Execute(insertOrMergeOperation);
        CarEntity objEntity = result.Result as CarEntity;
        return objEntity;
    }

听起来,实体的属性根据使用情况而有所不同。可能发生的情况是,Azure表存储仅为不为null(具有值集)的属性创建列。因此,您将只看到为已设置的属性创建的列。

听起来似乎表存储的性能符合您的要求,但不一定符合您的预期。正如@Paul Fryer所回答的那样,ATS不会存储空值,而您不会(按照引用的代码)初始化CarEntity属性,默认情况下,这些属性将为空。因此,只有用户设置的属性才会保存到表中

#备注:

如果使用“插入”或“替换实体”操作替换 实体,如果 新实体没有定义它们。将删除具有空值的属性 也可以删除

另外,从您的代码

TableResult result = table.Execute(insertOrMergeOperation);
CarEntity objEntity = result.Result as CarEntity;
结果将包含TableOperation,而不是完整实体的副本,以防这是您所期望的

例如,使用SQL表(其中未指定值的字段具有数据库默认值或默认值为null)与Azure表模型(其中未指定值的字段不存在)之间可能存在差异。在读取/写入所选存储时,您只需了解这种差异


如果需要将所有字段持久化到表中,则为每个属性提供默认值,例如string.Empty

如果字符串为null或空,则根本不保存属性。你没有做错什么,你只需要在你和他们一起工作时考虑到这一点。


如果您使用的是TableEntity,那么它会为您执行空/空检查。如果您使用的是DynamicTableEntity,那么您必须自己进行检查

我想我的问题已经通过这个-[链接]得到了答案。我只是没有意识到十进制数据类型会在这方面给我带来问题。感谢那些帮助我的人!
TableResult result = table.Execute(insertOrMergeOperation);
CarEntity objEntity = result.Result as CarEntity;