C#RavenDB删除

时间:2012-08-23 14:24:42

标签: ravendb

我有以下对象: WordOccurrence,它有两个属性: - 字符串。 - 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); - >得到了例外......

有可能??

1 个答案:

答案 0 :(得分: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(如果它是会话中的唯一操作),或者使用{{1从会话中退出该对象。

如果您希望Word属性是文档的ID,则可以通过customizing the DocumentStore conventions

来实现