无法将azure表存储中string类型的实体更新为null

时间:2013-05-13 12:56:59

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

我的用户表有一个名为" PictureUri"的属性。字符串类型。默认为null,然后我将其更新为某些文本。稍后,如果我尝试再次将其更新为null,则不会发生。更新成功但字符串属性不会更改为null。我可以将相同的属性更新为其他文本,但不能为空。

azure表存储是否允许我将属性更新为null?

以下是示例代码:

型号:

public class User
    {
        public string PictureUri{ get; set; }
        public string Email { get; set; }
        public string Username { get; set; }
    }

[System.Data.Services.Common.DataServiceKey(new string[] { "PartitionKey", "RowKey" })]

    public class PersistedUser : User,ITableEntity
    {
        public string PartitionKey
        {
            get { return this.Email; }
            set { this.Email = value; }
        }

        public string RowKey
        {
            get { return this.Username; }
            set { this.Username = value; }
        }

        public DateTime Timestamp { get; set; }

    }

更新API

user.PictureUri = null;
  tableServiceContext.AttachTo(TableNames.User, user);
        tableServiceContext.Update(user);
        tableServiceContext.SaveChanges(System.Data.Services.Client.SaveChangesOptions.ReplaceOnUpdate);

        var tempUser = this.tableServiceContext.QueryableEntities.Where(u => u.RowKey.Equals(user.Username, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

        tableServiceContext.Detach(user);

编辑:

使用SaveChangesOptions.ReplaceOnUpdate更新表中的值,但是当我尝试查询它时,它返回旧数据。知道问题可能是什么吗?

1 个答案:

答案 0 :(得分:2)

尝试使用以下SaveChanges()并提供ReplaceOnUpdate作为SaveChangesOption。类似的东西:

        user.PictureUri = null;
        tableServiceContext.AttachTo(TableNames.User, user);
        tableServiceContext.Update(user);
        tableServiceContext.SaveChanges(SaveChangesOption.ReplaceOnUpdate);
        tableServiceContext.Detach(user);

我认为发生的事情是默认保存选项是“Merge”,它不会更改未传递的值(即传递为null)。

其他选项可以是将user.Picture1设置为String.Empty而不是null