如何解决具有成员资格和角色的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 举报,一经查实,本站将立刻删除。