我知道这篇文章的标题会让一些人感到不安。自从2011年12月开始使用RavenDB以来,我意识到我对数据进行建模的方式并不适合使用文档数据库。首先,我完全理解这一点。其次,我希望在当前情况下有一种方法可以使下面的场景正常工作。
场景:我想在数据库中删除特定的Foo文档。但是,如果该文档被另一个文档引用,我就不想删除它。因此,我已经这样做了:
public void Delete(Foo foo)
{
VerifyFooNotUsedByBar(foo); // Make sure no bars reference this foo
VerifyFooNotUsedBySnuh(foo); // Make sure no snuhs reference this foo
// What happens if some other user causes this foo to be referenced
// by a bar, right now?
new GenericData().Delete(foo);
}
这个方法可以工作,但是...在我检查完之后,有可能会有其他东西引用foo。有没有一种方法可以在整个方法完成之前锁定其他更改?
如果答案是:“不行。你使用文档数据库的方式有问题。”我理解。我只是希望有一种方法可以解决当前的问题。