gpt4 book ai didi

asp.net-mvc-4 - 将 WebSercurity.CreateAccount 与 TrasactionScope 中的其他查询一起使用,不启用 DTC

转载 作者:行者123 更新时间:2023-12-04 21:19:38 24 4
gpt4 key购买 nike

问题。 在注册场景中,我试图在我的 User 表中插入一个用户,然后调用 WebSercurity.CreateAccount对于该用户(在交易中)。这会导致 MS DTC 在服务器上不可用的错误。

描述。 我这样做的原因是因为我有一个 Customer继承自 User 的实体,所以 WebSercurity.CreateUserAndAccount无法使用,因为它不知道 Customer并插入一个 User记录。

我将 Asp.net MVC 4 与 EntityFramework 5、CodeFirst 和 SQL Server 2008 R2 一起使用。

任何不使用 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, model.Password, true);

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

// tx.Complete();
//}

最佳答案

出现 DTC 错误是因为您试图跨越两个不同的数据库连接跨事务。您有多种选择。

SimpleMembership 是为简单的场景设计的。您正在执行高级方案,因此您可能应该使用不同的成员资格提供商。

关于asp.net-mvc-4 - 将 WebSercurity.CreateAccount 与 TrasactionScope 中的其他查询一起使用,不启用 DTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15014842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com