微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有成员资格和角色的TransactionScope在同一块中调用仅使用一个连接?

如何解决具有成员资格和角色的TransactionScope在同一块中调用仅使用一个连接?

| 我在同一事务范围内调用了Membership API和Roles API。我已经读到,打开多个连接会导致升级,需要启用分布式事务,所以我正在寻找一种打开一个连接并与之共享的方法:成员资格,角色,我自己的电话。 这是导致不必要的升级的工作代码
public static void InsertUser(string userName,string email,string roleName,int contactId,string comment)
      {
         /*
          * Exceptions thrown here are caught in the DetailView\'s event handler and piped to the UI.
          */

         using(var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew))
         {
            string password = Membership.GeneratePassword(Membership.MinrequiredPasswordLength,Membership.MinrequiredNonAlphanumericCharacters);
            const string passwordQuestion = \"Should you change your password question?\";
            const string passwordAnswer = \"yes\";
            MembershipCreateStatus status;
            MembershipUser user = Membership.createuser(userName,password,email,passwordQuestion,passwordAnswer,true,out status);

            if(user == null)
            {
               throw new Exception(GetErrorMessage(status));
            }

            // Flesh out new user
            user.Comment = comment;
            Membership.UpdateUser(user);

            // Give user a role
            Roles.AddUserToRole(user.UserName,roleName);

            // Create bridge table record
            Guid userId = (Guid)ExceptionUtils.ThrowIfDefaultValue(user.ProviderUserKey,\"ProviderUserkey is null!\");
            insertIntoAspnet_Users_To_Contact(userId,contactId);

            // Send welcome email
            EmailUtils.SendWelcomeEmailFromAdmin(userName,roleName);

            transactionScope.Complete();
         }
      }
谢谢     

解决方法

        如果您具有SQL2008或更高版本,则它可以处理多个连接上的事务,而无需升级为MSDTC。要求对所有连接使用完全相同的连接字符串。 如果您使用的是较低版本的SQL Server,我认为您松了手。几个月前,我对此进行了调查,但发现没有办法进行处理,因此我最终跳过了事务并改为执行自己的错误处理。客户使用了SQL2005,因此无法升级。     ,        您指定了“ 1”,这意味着即使您已经有合适的环境代码,每次传入该代码段时也要进行一次新事务。 只是这样做:
using(var transactionScope = new TransactionScope())
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。