我正在开发DNN 4.9中的模块以导入用户。
我需要事务支持,但必须使用DNN类来导入/创建用户。开箱即用的类似乎不支持交易。
我正在使用以下对象来创建用户:
UserController.CreateUser(ref UserInfo) ...
由于我正在改进现有模块,因此无法完全重写/更改导入方式。 (比如直接使用SQL语句来创建用户)
答案 0 :(得分:0)
我不是DNN用户,但在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。