3

我知道这篇文章的标题必须让一些人畏缩。自 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);
}

但是,这可行……在我对它们进行检查之后,它有可能被其他东西引用。有没有办法在整个方法完成之前锁定其他更改?

我明白答案是否是:“不。你用这种方式使用文档数据库搞砸了自己。” 我只是希望有办法解决我当前的问题。

4

1 回答 1

2

鲍勃,不是真的,不。即使您对此进行了交易,它也不会锁定。您可以做的是确保引用将保留在元数据中。所以当我引用 Foo 时,我需要更新 Foo 的元数据来告诉它我正在这样做。这将导致单点交易真相。

于 2012-07-16T07:04:52.877 回答