RavenDB中的引用完整性

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);
}

这个方法可以工作,但是...在我检查完之后,有可能会有其他东西引用foo。有没有一种方法可以在整个方法完成之前锁定其他更改?

如果答案是:“不行。你使用文档数据库的方式有问题。”我理解。我只是希望有一种方法可以解决当前的问题。

1个回答

2

Bob,不是的,即使你在这方面进行了交易,它也不会被锁定。你可以做的是确保引用在元数据中得到维护。因此,当我引用Foo时,我需要更新Foo的元数据来告诉它我正在这样做。这将导致单一的事务真相点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接