有没有替代TransactionScope的方法,不需要启用DTC?
在这个事务中,我需要执行两个操作:
- 创建一个用户(使用成员资格 - SQL成员资格提供程序)
- 进行一次插入操作。
有没有替代TransactionScope的方法,不需要启用DTC?
在这个事务中,我需要执行两个操作:
TransactionScope使用.Net中的轻量级事务管理器LTM。只有在同一事务中打开多个连接或者在不同的数据库之间进行操作时,TransactionScope才会将事务升级为基于2PC的TX管理器DTC。
对于MS SQL Server 2008及以上版本,只有当您在打开连接到不同的数据库时,DTC才会参与其中。或者,如果您从多个线程中打开连接并在同一事务中操作(除非您正在使用DependentTransaction
,这是您应该在全局事务中注册的内容,以便进行线程处理)。
另外,我在Castle.Transactions中提供了一些多线程故事的支持。
另外一个注意点:如果您使用TransactionScope,请务必显式声明IsolationLevel,否则您的所有事务都将串行化(IsolationLevel.Serializable)!
Enlist=false
。connectionString="Data Source=xxx;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx;Enlist=false"
using (TransactionScope tScope = new TransactionScope())
{
MembershipCreateStatus createStatus;
Membership.CreateUser(model.Email, model.Password, model.Email, null, null, true, model.Id, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
Roles.AddUserToRole(model.Email, "Administrator");
_UpdatePersonnelAccess(model);
_UpdatePersonnelHasAccess(model);
_SendEmail_Welcome(model);
PersonSessionLog.ManageSession(model);
}
else
ViewBag.Message = "Error";
tScope.Complete();
}
Enlist=false
会导致TransactionScope
完全无法工作;没有更新被注册到可用的TransactionScope
中。我使用标准 SQL 跟踪对 Entity Framework 6 应用程序进行了事务事件验证。 - Jean-Paul M