-1

我有以下对象: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); -> 得到异常...

可能吗??

4

1 回答 1

1

请尝试格式化您问题中的代码,并重新表述您要执行的操作。目前尚不清楚您是否期望 savew2应该引用与 相同的对象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 回答