Ash*_*kan 5 msdtc transactionscope asp.net-mvc-4 entity-framework-5 simplemembership
问题.在注册方案中,我试图在我的User表中插入一个用户,然后调用WebSercurity.CreateAccount
该用户(在一个事务中).这会导致MS DTC在服务器上不可用的错误.
描述.我这样做的原因是因为我有一个Customer
继承自的实体User
,所以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, model.Password, true);
await Task.Run(() => EmailHelper.SendConfrimationEmail(token, model.Email));
// tx.Complete();
//}
Run Code Online (Sandbox Code Playgroud)
我找到了一个可能的解决方案,但我不确定这是否是最好的解决方案。这个想法来自这篇博客文章,其中介绍了如何在 POCO 实体中包含 simplemembership 表并自己创建这些表(不使用 WebSecurity)。
因此,我认为我可以CreateAccount
通过简单地在表中插入一条记录webpages_Membership
并AddUserToRole
在表中插入一条记录来在我的存储库中实现该方法webpages_UsersInRoles
。对于像GetUser
and 这样的其他查询,我们可以像以前一样使用WebSecurity
andRoles
类。
它似乎工作正常(否则我错过了一些东西),但有一些额外的工作要做,但我不希望这样做!
因此,如果有人能给我更好的解决方案,我会很高兴。
归档时间: |
|
查看次数: |
1030 次 |
最近记录: |