【问题标题】:Cannot Save Nullable<bool> to Azure Table when its Null当 Null 为 Null 时,无法将 Nullable<bool> 保存到 Azure 表
【发布时间】:2012-02-11 04:49:57
【问题描述】:

例如,我在 c# 中有一个bool? Status

Status = true/false时,可以保存到Azure表,没问题

但是当Stats = null时,无法保存(update)到Azure表,该列仍然保持旧值

我猜可能是因为 Azure 表没有方案,但是解决方案是什么?

如何保存一个null覆盖原来的值?

编辑,代码

这样的数据:

public class someEntity : TableServiceEntity
{
    public bool? Status { get; set; }
}

像这样更新:

tableContext.AttachTo("sometable", someEntity);
tableContext.UpdateObject(someEntity);
tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch & SaveChangesOptions.ReplaceOnUpdate);

(我尝试将AttachTo"*" 作为etag,尝试删除SaveChangesOptions,均无效)

对不起,我的愚蠢,应该是这段代码,然后工作

tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch | SaveChangesOptions.ReplaceOnUpdate);

【问题讨论】:

  • 数据库中的字段是否允许为空?
  • 我相信是的,如果初始值为null,那么您仍然可以保存。但是一旦你保存为真/假,你就不能再设置回null了。
  • 你能发布你的代码吗?这很可能是 Nullable 默认值为 null 的问题,并且 API 在没有显式更新/更新标志的情况下忽略默认值。
  • @EricYin 既然你已经自己解决了这个问题,我建议你删除你最近的更新并将其作为答案发布。

标签: c# azure boolean nullable azure-table-storage


【解决方案1】:

正如@Matthew 建议的那样,我把答案放在这里

很简单,使用:

tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch | SaveChangesOptions.ReplaceOnUpdate);

对于多个选项,请使用| (or),而不是&amp; (and)Reason

SaveChangesOptions.ReplaceOnUpdate = true 表示整个实体将被替换 SaveChangesOptions.ReplaceOnUpdate = false,表示合并,保留旧数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多