无法将azure表存储中字符串类型的实体更新为空

本文关键字:类型 实体 更新 字符串 azure 存储 | 更新日期: 2023-09-27 18:13:31

我有一个名为"PictureUri"的字符串类型属性的用户表。默认情况下它是空的,然后我将它更新为一些文本。后来,如果我试图更新它为空再次,它不会发生。更新成功,但string属性没有更改为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更新表中的值,但当我试图查询它时,它返回旧数据。知道是什么问题吗?

无法将azure表存储中字符串类型的实体更新为空

尝试使用以下SaveChanges()并提供ReplaceOnUpdate作为SaveChangesOption。比如:

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

我认为发生的事情是默认的保存选项是"合并",它不会改变未传递的值(即传递为空)。

其他选项可以设置user.Picture1String.Empty而不是null