0
ravendbから複数の行を選択して更新しようとしていますが、再帰的に同じ行が更新されています。すなわち最初の100行。変更はありません。Ravendb select - 複数行更新
ここに私のコードです。いくつかの行を選択して、各行のいくつかのフィールドを更新し、私の仕事が終了するまで何度も何度もやり直します。
var currentEmailId = 100;
using (var session = store.OpenSession())
{
var goon = true;
while(goon){
var contacts = session.Query<Contacts>().Where(f => f.LastEmailId < currentEmailId).Take(100);
if(contacts.Any()){
foreach(var contact in contacts){
EmailOperation.Send(contact, currentEmailId);
contact.LastEmailId = currentEmailId;
}
session.SaveChanges();
}
else{
goon = false
}
}
}
WaitForIndexesAfterSaveChangesは安全ですか?たとえば1秒間だけです。 –
ええ、それは安全です。適切なインデックスが更新されるまでブロックされ、失効したデータをクエリしません。 (私は今、私のプロダクションアプリでこれをかなり頻繁に呼び出す習慣になっています) –
通常、更新される連絡先の数はいくつですか? Tens?百人?何千?投稿の最後に述べたように、この関数が呼び出されるたびに多くの連絡先を更新する場合は、Streaming + BulkInsertを検討するとよいでしょう。それは速くなり、失効したインデックスに対処する必要はありません。 –