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をnullにすることはできないのでできません。テーブルを2回呼び出さずにこれを行うことは可能ですか?これは頻繁に呼び出されるので、回避できるのであれば、更新する前にオブジェクトを取得したくありません。

4

1 に答える 1

1

DateTimeそれ自体をnullにすることはできないのは事実ですが、代わりにNullable<DateTime>(または必要にDateTime?応じて)を使用すると、その日付をnullに設定できます(ストレージクライアントライブラリは型の処理方法を理解しNullable<>ます。これはできない場合があります。ただし、このオブジェクトを使用している他の場所には意味があります。

null許容型を使用しても意味がない場合は、この代替案を試すことができます(これがどれほど賢明かはわかりませんが、希望どおりに機能すると思います)。TableEntityJustLastAccessed通常の//プロパティに加えて、更新するプロパティのみを持つPartitionKey新しいクラスRowKeyを作成します。TimestampDateLastAccessedUtc

更新コードでは、を作成するのではなく、同じ/をTableEntity使用してを作成し、それを保存します。デフォルトでは、ストレージクライアントライブラリはオブジェクト全体を上書きするのではなく変更をマージするため、関心のあるプロパティのみを更新する必要があります。TableEntityJustLastAccessedPartitionKeyRowKey

于 2011-03-15T01:27:36.640 に答える