質問のコードをフォーマットして、実行しようとしていることを言い換えてみてください。保存w2
がと同じオブジェクトを参照する必要があるかどうかは明確ではありませんが、そうw1
ではありません。IDが同じであっても、Ravenが削除を処理する方法とは異なります。SaveChangesを呼び出した直後に保存したオブジェクトを削除するか(これはなぜ実行するのかわかりません)、より可能性の高いシナリオLoad
では、後でそれを呼び出してからDelete
:を呼び出す必要があります。
var w1Id = string.empty;
using(session)
{
var w1 = new WordOccurrence { Word="Hey", Occurrence=1};
session.store(w1);
session.SaveChanges();
w1Id = w1.Id;
//if you aren't declaring the Id property for some reason...
w1Id = session.Advanced.GetDocumentId(w1);
}
//somewhere else in the code
using(session)
{
var w1 = session.Load<WordOccurrence>(w1Id);
session.Delete(w1);
session.SaveChanges();
}
Store
要するに、あなたが電話をかける前に、あなたがセッションに伝えたばかりの何かを削除することはできないということですSaveChanges
。操作を元に戻そうとしている場合Store
、おそらくユーザーが元に戻すボタンを押したために、呼び出しないでくださいSaveChanges
(セッション内の唯一の操作である場合)、またはセッションSession.Advanced.Evict(w1)
からそのオブジェクトを引き出すために使用します。
WordプロパティがドキュメントのIDであると期待している場合は、DocumentStoreの規則をカスタマイズすることでそれを実現できます。