2009-09-25 49 views
0

我通過System.Data.SQLite和SubSonic 3使用Visual Studio 2008,C#,SQLite。我的應用程序已經到了需要升級數據庫模式(添加列,觸發器等),然後通過SubSonic生成的ActiveRecord對象添加新記錄 - 所有這些都在單個事務的範圍內,這樣任何失敗都可以很好地回滾。在事務中通過SubSonic 3修改SQLite數據庫模式和數據

理想的情況下,這是有點什麼,我希望做的:

Begin Transaction 
try 
    Update Schema to latest version 
    Use SubSonic objects to add new records/modify existing 
    Commit Transaction 
catch 
    Rollback Transaction 

不幸的是,這是行不通的。所有模式更改當前都是通過SubSonic.Query.CodingHorror進行的,這似乎並不考慮事務。有沒有辦法在單個事務的範圍內執行模式更改和SubSonic數據更改?

回答

1

我想我找到了我的問題的答案:對所有操作使用相同的數據庫連接,並在該數據庫連接上使用事務。由於我沒有告訴SubSonic如何處理所有數據庫連接 - 它使用默認方法,每個查找或創建對象或CodingHorror一個連接。由於事務不能跨越數據庫連接,我看到的行爲是完全可以預料的。

一旦我創建了自己的數據庫連接並執行了查找,創建了CodingHorror模式更改,所有事務都開始正常工作。

相關問題