RavenDB的引用完整性

RavenDB的引用完整性,ravendb,Ravendb,我知道这篇文章的标题会让一些人畏缩。自2011年12月以来,我一直在使用RavenDB,我逐渐意识到,我对数据的建模方式与使用文档数据库不相适应。首先,我完全明白。其次,考虑到我目前的情况,我希望有一种方法可以使下面的场景正常工作 场景:我想删除数据库中的某个Foo文档。但是,如果该文档被其他文档引用,我不想删除它。所以,我已经做到了: public void Delete(Foo foo) { VerifyFooNotUsedByBar(foo); // Make sure no b

我知道这篇文章的标题会让一些人畏缩。自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进行检查之后,它有可能被其他东西引用。在整个方法完成之前,是否有方法锁定其他更改

如果答案是:“不,你这样使用文档数据库搞砸了自己。”我理解。我只是希望有办法解决我当前的问题。

鲍勃, 不是真的,不。即使你有一个关于这个的交易,它也不会锁定。 您可以做的是确保元数据中维护引用。 因此,当我引用Foo时,我需要更新Foo的元数据来告诉它我正在这样做。 这将导致交易真相的单一点