0

私のアプリケーションでは、AddObjectメソッドを介してTableServiceContextにエンティティを追加しています。プロセスの後半で、いくつかのプロパティを更新するためにこの特定のエンティティを取得するためにTableServiceContextをクエリしたいのですが、クエリで結果が得られません。AddObjectの直後にSaveChangesを実行した場合にのみ、結果が表示されます。これは、サーバーへの余分なラウンドトリップがあることを意味します。エンティティを作成して更新してから、SaveChangesを呼び出して、エンティティをAzureTableStorageに永続化します。

コンテキストを照会したときに結果が得られない理由を誰かが知っていますか?SaveChangesを追加で呼び出さずに、コンテキストからエンティティを取得する方法はありますか?

ありがとう

ロナルド

4

2 に答える 2

1

ここで Upsert しようとしているようです。InsertOrReplace のサポートを見たことがありますか? InsertOrMerge もありますが、上書きしようとしていると思います。

http://msdn.microsoft.com/en-us/library/hh452242.aspx

于 2012-10-11T14:20:39.653 に答える
0

AddObjectローカルメモリ内のオブジェクトの追跡を開始するだけなので、テーブルストレージにクエリを実行してもオブジェクトが返されないことは理にかなっています. (テーブル ストレージはそれを認識していません。) これを行いたい場合は、新しいエンティティを自分で追跡する必要があります。

シナリオにちょっと戸惑う。次のようなものが必要なようです (動作しません):

var foo = new Foo();
context.AddObject("foo", foo);
...
foo = context.CreateQuery<Foo>("foo").Where(...).Single();
foo.bar = "baz";
context.UpdateObject(foo);
context.SaveChanges();

これに置き換えてみませんか?

var foo = new Foo();
...
foo.bar = "baz";
context.AddObject("foo", foo);

TableServiceContext作成したオブジェクトを取得するためにを通過する必要があるのは、コードのどの部分ですか?

于 2012-10-11T10:15:45.067 に答える