与RavenDB的参考完整性

时间:2012-07-16 02:15:12

标签: ravendb

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

我理解的答案是:“没有。你这样用文档DB搞砸了自己。”我只是希望能解决我当前的问题。

1 个答案:

答案 0 :(得分:2)

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