2

文字列型の「PictureUri」という属性を持つユーザーテーブルがあります。デフォルトではnullで、それをテキストに更新します。後でもう一度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 を使用するとテーブルの値が更新されますが、クエリを実行しようとすると古いデータが返されます。何が問題なのかわかりますか?

4

1 に答える 1

3

以下SaveChanges()を使用してみてReplaceOnUpdate、SaveChangesOption として指定します。何かのようなもの:

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

何が起こっているのかと思うと、デフォルトの保存オプションは「マージ」であり、渡されない(つまり、null として渡される)値は変更されません。

他のオプションは、の代わりにに設定user.Picture1することができます。String.Emptynull

于 2013-05-13T14:12:05.807 に答える