Обновление объектов таблицы Azure с использованием API C # без перезаписи типов значений - PullRequest
0 голосов
/ 15 марта 2011

Я не уверен, возможно ли это, но я пытаюсь использовать C # Azure Table API для обновления свойства в табличном хранилище, создав новый объект и объединив его:

// Create an object that only specifies the property to update
// (null properties are not updated)
var itemToUpdate = new TableEntity("PartitionKey", "RowKey");
itemToUpdate.DateLastAccessedUtc = DateTime.Now;
// can't do this!          
//itemToUpdate.DateCreatedUtc = null;

// Attach to the item, update it, and save the changes
_dataContext.AttachTo(_dataContext.TableName, itemToUpdate, "*");
_dataContext.UpdateObject(itemToUpdate);
_dataContext.SaveChanges();

По сути, я хочу обновить дату последнего доступа без обновления даты создания, но, поскольку DateTimes не может быть нулевым, я не могу этого сделать.Можно ли сделать это, не делая два вызова к столу?Так как это будет вызываться часто, я не хочу извлекать объект перед его обновлением, если я могу избежать его.

1 Ответ

1 голос
/ 15 марта 2011

Хотя верно, что DateTime само по себе не может быть нулевым, если вместо этого вы используете Nullable<DateTime> (или DateTime?, если хотите), вы можете установить эту дату на ноль (и хранилищеКлиентская библиотека понимает, что делать с Nullable<> типами. Это может не иметь смысла для других мест, где вы используете этот объект.

Если использование обнуляемого типа не имеет смысла, вы можете попробоватьэта альтернативная идея (я не уверен, насколько это разумно, но я думаю, что она будет делать то, что вы хотите). Создайте новый класс TableEntityJustLastAccessed, который имеет обычные свойства PartitionKey / RowKey / Timestamp плюс простоDateLastAccessedUtc свойство, которое вы хотите обновить.

В своем коде обновления вместо создания TableEntity создайте TableEntityJustLastAccessed с тем же PartitionKey / RowKey и сохраните его.по умолчанию клиентская библиотека хранилища объединяет изменения, а не переопределяет весь объект, она должна обновлять только то свойство, которое вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...