2012-07-16 63 views
3

我知道這篇文章的標題必須讓一些人畏縮。自2011年12月以來我一直在使用RavenDB,並且我意識到我已經以不適合使用文檔數據庫的方式建模我的數據。首先,我完全明白這一點。其次,鑑於我目前的情況,我希望有一種方法可以使下面的方案正常工作。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); 
} 

這個工作,但是...有一個機會,可以富別的東西可以參考,我做的檢查他們。有沒有辦法在整個方法完成之前鎖定其他更改?

我明白如果答案是:「不,你通過這種方式使用文檔數據庫來搞砸自己。」我只是希望能解決我目前的問題。

回答

2

鮑勃, 不是,沒有。即使你有這個交易,它也不會鎖定。 您可以做的是確保引用將保留在元數據中。 因此,當我引用Foo時,我需要更新Foo的元數據來告訴它我正在這樣做。 這會導致事務真相的單點。