加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 在TrasactionScope中使用WebSercurity.CreateA

发布时间:2020-12-16 03:22:35 所属栏目:asp.Net 来源:网络整理
导读:问题.在注册方案中,我尝试在User表中插入用户,然后为该用户调用WebSercurity.CreateAccount(在事务中).这会导致MS DTC在服务器上不可用的错误. 描述.我之所以这样做,是因为我有一个继承自User的Customer Entity,因此无法使用WebSercurity.CreateUserAndAccou
问题.在注册方案中,我尝试在User表中插入用户,然后为该用户调用WebSercurity.CreateAccount(在事务中).这会导致MS DTC在服务器上不可用的错误.

描述.我之所以这样做,是因为我有一个继承自User的Customer Entity,因此无法使用WebSercurity.CreateUserAndAccount,因为它不了解Customer而只是插入User记录.

我正在使用带有EntityFramework 5,CodeFirst和SQL Server 2008 R2的Asp.net MVC 4.

任何不使用DTC的建议将不胜感激!

编辑.
很明显为什么会出现这种错误,因为websecurity使用自己的数据库连接,而我的存储库使用另一个连接,虽然我已经配置simplemembership使用相同的DbContext类作为我的存储库,但问题是它创建了一个新的实例DbContext的…

我希望有一种方法可以传递现有的上下文对象,或者连接到WebSecurity以与其方法一起使用.

这是代码:

if (ModelState.IsValid)
        {
            //using (TransactionScope tx = new TransactionScope())
            //{
                UnitOfWork.UserRepository.Insert(new Customer
                {
                    FirstName = model.FirstName,LastName = model.LastName,Email = model.Email,Tel = model.Tel,Mobile = model.Mobile,BirthDate = model.BirthDate,InsertDate = DateTime.Now,UserType = UserType.Customer,MaritalStatus = model.MaritalStatus,ZipCode = model.ZipCode,StreetAddress = model.StreetAddress,City = model.City,State = model.State
                });
                UnitOfWork.Commit();

                string token = WebSecurity.CreateAccount(model.Email,model.Password,true);

                Roles.AddUserToRole(model.Email,"Customer");
                //WebSecurity.Login(model.Email,true);

                await Task.Run(() => EmailHelper.SendConfrimationEmail(token,model.Email));

            //  tx.Complete();
            //}

解决方法

发生DTC错误是因为您尝试跨两个不同的数据库连接跨越事务.你有几个选择.

SimpleMembership专为简单场景而设计.您正在进行高级方案,因此您应该使用不同的成员资格提供程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读