是否有不需要启用 DTC 的 transactionScope 的替代方法?
在事务中我需要进行两个操作:
- 创建一个用户(使用成员资格 - sql 成员资格提供程序)
- 执行一次插入操作。
是否有不需要启用 DTC 的 transactionScope 的替代方法?
在事务中我需要进行两个操作:
TransactionScope 使用 LTM - .Net 中的轻量级事务管理器。只有在同一个事务中打开多个连接或在数据库之间切换时,TransactionScope 才应该将事务提升到基于 2PC 的 TX-manager DTC。
对于 MS SQL Server 2008 及更高版本,仅当您打开与不同数据库的连接时才会涉及 DTC 。或者,如果您正在从多个线程打开相同事务中的连接,除非您使用DependentTransaction
的是如果您想进行线程处理,您应该在全局事务中登记。
附带一点:我对Castle.Transactions中的多线程故事有一些支持。
旁注#2:如果您使用 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();
}
我的应用程序在 Amazon EC2 中发布,而数据库在 Amazon RDS 中。RDS 不支持 DTC,这就是为什么我还需要一种方法来防止升级到 DTC。顺便说一句,我使用的是 SQL Server 2008 R2。我有 2 个数据库 - ASPNETDB、数据 DB
感谢保罗的帖子!