2013-05-07 84 views
0

有沒有辦法在db.submitchanges之後回滾而不需要事務?linq to sql submitchanges rollback

這將是一個恥辱,必須運行一個專門的登錄服務。有沒有其他方法可以回滾而不使用該特殊服務?

在此先感謝!

編輯:

我真的想什麼:我有2間數據庫的交互我想以後對方做對。

比方說,我想添加一些東西在數據庫表'插槽'。提交後,我可以收到由自動增量創建的Id。

那個ID,我想用來在數據庫中插入一個新的日誌。但是當插入到日誌失敗時,我想回滾'插槽'中的動作..

這是可能的交易,我相信,但似乎我不能夠做到這一點沒有得到錯誤。即使所有服務器都設置爲允許他們和防火牆是關閉..

+0

你在說什麼特別的服務?記錄怎麼樣?我不清楚問題是什麼。 – usr 2013-05-07 13:34:02

回答

0

db.SubmitChanges()被打開交易itsself所以避免了它是不是一種選擇。

不知道你對於loggin服務意味着什麼,我猜你的意思是你使用數據庫進行日誌記錄,並且你正在使用相同的datacontext將日誌寫入數據庫和業務數據,以至於可能發生你的業務數據失敗(如此回滾事務)並且您的日誌記錄也會回滾。

最簡單的解決方案是使用專門的數據上下文進行日誌記錄。

更新 沒有必要多的SubmitChanges在你的情況,因爲你並不需要的ID,您可以將實體添加到日誌。這裏有一個看看 How do I get Id of a record without submitting and re-querying?

而且因爲你只能有對的SubmitChanges,它都將在一個事務中,它會做你想要

+0

我編輯了一些原始問題的更多信息... – user1122844 2013-05-10 12:33:25

+0

已回答,已在另一個問題 - 我用鏈接更新了我的答案 – Pleun 2013-05-10 13:44:40

-1

您應該在同一同時插入插槽和日誌什麼時間。

我不知道你的數據模型是如何建立但簡化的。

Log myLog = new Log(); 
Slot mySlot = new Slot(); 
... 
... 

DataContext db = new DataContext(); 

db.Slots.InsertOnSubmit(mySlot); 

myLog.Slot = mySlot; 
myLog.... = ....; 

db.Logs.InsertOnSubmit(myLog); 

db.SubmitChanges(); 
相關問題