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