我正在DNN 4.9中開發一個模塊來導入用戶。導入使用與DNN類交易的DotNetNuke用戶
我需要事務支持,但必須使用DNN類來導入/創建用戶。開箱即用的類似乎不支持交易。
我用下面的對象創建用戶:
UserController.CreateUser(ref UserInfo) ...
正如我改進現有的模塊和如何導入的方式完全重寫/變化是不是一種選擇。 (如使用SQL語句直接創建用戶)
我正在DNN 4.9中開發一個模塊來導入用戶。導入使用與DNN類交易的DotNetNuke用戶
我需要事務支持,但必須使用DNN類來導入/創建用戶。開箱即用的類似乎不支持交易。
我用下面的對象創建用戶:
UserController.CreateUser(ref UserInfo) ...
正如我改進現有的模塊和如何導入的方式完全重寫/變化是不是一種選擇。 (如使用SQL語句直接創建用戶)
我不是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。
謝謝!我知道我的腦海裏有這樣的存在。你能詳細解釋一下範圍是什麼嗎?這是否包括諸如文件操作之類的操作? 現在我該如何給你賞金? – Johannes 2009-09-05 08:49:59
查看我的更新。賞金獎勵給您選擇的「接受」答案。 – 2009-09-05 17:09:28