Невозможно обновить объект типа строка в хранилище таблицы Azure до нуля
У меня есть пользовательская таблица, которая имеет атрибут с именем "PictureUri" типа строки. По умолчанию его ноль, а затем я обновляю его до некоторого текста. Позже, если я попытаюсь обновить его до нуля снова, это не произойдет. Обновление прошло успешно, но строковый атрибут не изменился на ноль. Я могу обновить тот же атрибут для некоторого другого текста, но только не для нуля.
Не позволяет ли хранилище таблиц Azure обновить атрибуты до нуля?
Вот пример кода:
Модель:
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 ответ
Попробуйте использовать следующее SaveChanges()
и предоставить ReplaceOnUpdate
в качестве опции SaveChangesOption. Что-то вроде:
user.PictureUri = null;
tableServiceContext.AttachTo(TableNames.User, user);
tableServiceContext.Update(user);
tableServiceContext.SaveChanges(SaveChangesOption.ReplaceOnUpdate);
tableServiceContext.Detach(user);
Я думаю, что происходит то, что опция сохранения по умолчанию - "Слияние", где она не изменяет значения, которые не передаются (то есть передаются как ноль).
Другой вариант может быть установить user.Picture1
в String.Empty
вместо null
,