2009-08-27 23 views
0

我正在DNN 4.9中開發一個模塊來導入用戶。導入使用與DNN類交易的DotNetNuke用戶

我需要事務支持,但必須使用DNN類來導入/創建用戶。開箱即用的類似乎不支持交易。

我用下面的對象創建用戶:

UserController.CreateUser(ref UserInfo) ... 

正如我改進現有的模塊和如何導入的方式完全重寫/變化是不是一種選擇。 (如使用SQL語句直接創建用戶)

回答

0

我不是DNN的用戶,但whithin一個CLR事務上下文任何ADO.Net操作將自動註冊到事務:

using(TransactionScope scope = new TransactionScope(
    TransactionScopeOption.Required)) 
{ 
     UserController.CreateUser(ref UserInfo) 
     ... 
     scope.Complete(); 
} 

除非一些DNN代碼顯式地禁用了事務範圍(通過創建一個新的範圍並且選項爲Supress),那麼實際的數據庫工作將被註冊到相應的事務中(例如任何SqlClient操作將被註冊到SqlTransaction中)。

更新

事務範圍是與當前線程相關聯的上下文對象。一旦創建,檢查其存在的.Net組件就會找到並知道它們必須參與交易。

由於底層文件系統不支持事務(至少在Win7之前),文件操作無法註冊到事務範圍中。 SQL Server提供程序,Oracle提供程序,MSMQ訪問程序和其他支持事務的.Net組件的組件將啓動事務並將其添加到當前作用域。當範圍是'完成'時,等價的SqlTransaction被提交。如果範圍'結束'(即其Dispose方法因爲到達using塊的末尾而被調用),但未'完成',則SqlTransaction將回滾。

如果多個組件註冊到單個事務作用域中,則它們將成爲分佈式事務的一部分。這可能發生在像在事務範圍下使用兩個單獨連接那樣簡單的事情上。 ADO.Net將自動將它們註冊爲真正的distributed transaction

+0

謝謝!我知道我的腦海裏有這樣的存在。你能詳細解釋一下範圍是什麼嗎?這是否包括諸如文件操作之類的操作? 現在我該如何給你賞金? – Johannes 2009-09-05 08:49:59

+0

查看我的更新。賞金獎勵給您選擇的「接受」答案。 – 2009-09-05 17:09:28