0

我不确定这是否可行,但我正在尝试使用 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 不能为空,我不能这样做。是否可以在不两次调用表的情况下执行此操作?由于这将被频繁调用,因此如果可以避免的话,我不想在更新对象之前检索它。

4

1 回答 1

1

虽然 aDateTime本身不能为空,但如果您使用 a Nullable<DateTime>(或者DateTime?如果您愿意),那么您可以将该日期设置为空(并且存储客户端库了解如何处理Nullable<>类型。这可能不会不过,这对您使用此对象的其他地方有意义。

如果使用可为空的类型没有意义,您可以尝试这个替代想法(我不确定这是多么明智,但我认为它会做你想要的)。创建一个新类,该类TableEntityJustLastAccessed具有通常的PartitionKey//属性以及您要更新的属性。RowKeyTimestampDateLastAccessedUtc

在您的更新代码中,不要创建 a ,而是使用相同的/TableEntity创建 a并保存它。因为默认情况下存储客户端库合并更改而不是覆盖整个对象,所以它应该只更新您关心的属性。TableEntityJustLastAccessedPartitionKeyRowKey

于 2011-03-15T01:27:36.640 回答