2013-01-04 95 views
1

我有一個方法如下面在C#:MongoDB的交易

private void Save(object) 
{ 
    mongoCollection.Save(object); 
    someotherRelationaldb.Save(object); 
} 

我有兩個數據塊中,我必須保存一個對象。一個是MongoDB,另一個是關係型數據庫SQL服務器。如果Commit on Relational DB失敗,我想回滾MongoDB保存(我想維護保存順序)。什麼是使用C#驅動程序回滾的正確方法。

回答

1

你不能。
做到這將是在一個try catch來包裝someotherRelationaldb.Save(object);,並在捕捉的唯一途徑,這樣做mongoCollection.Remove

你可能會需要對object已知標識符屬性,然後可以這樣做:

mongoCollection.Remove(Query.EQ("_id", object.Id)); 

因此,而雜亂,你的保存方法看起來有點像:

private void Save(object) 
{ 
    mongoCollection.Save(object); 

    try 
    { 
     someotherRelationaldb.Save(object); 
    } 
    catch 
    { 
     mongoCollection.Remove(Query.EQ("_id", object.Id)); 
    } 
} 

另一種方式是一個標誌屬性存儲在object是那些獲得的更新成功寫入之後someOtherRelationaldb

這還不夠完美下去,但其中IsPersisted標誌是真實的,你可以修改你的查詢只返回文檔。

儘管我不這麼認爲,但這些方法都不會在高度分散的環境中發揮出色。

+0

謝謝..我以爲是這樣..我的保存可能是更新或插入:) – ajp

+0

在更新的情況下,你可能不想刪除文件..但恢復到更新前的最後一個版本?只是要記住 – Alex