-1

次のオブジェクトがあります: WordOccurrence には 2 つの属性があります: - 文字列の単語。- int オカレンス。例外を取得せずに、次のことを実行したいと思います (-: WordOccurrence w1 = new WordOccurrence() {Word ="Hey", Occurrence = 1}; WordOccurrence w2 = new WordOccurrence() {Word ="Hey", Occurrence = 1};

ここで、最初の w1 を保存したいと思いますが、w2 を使用して彼を削除します。

session.store(w1); session.delete(w2); -> 例外が発生します...

出来ますか??

4

1 に答える 1

1

質問のコードをフォーマットして、実行しようとしていることを言い換えてみてください。保存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の規則をカスタマイズすることでそれを実現できます。

于 2012-08-23T18:26:36.140 に答える