民间,
Envrionment:ASP.NET MVC 4,Razor
我正在为我的网络应用程序使用SimpleMembership提供程序。当用户请求注册时,我需要调用WebSecurity.CreateUserAndAccount并更新其他一些表。整个操作必须是交易性的。这就是我的想法:
using (UsersContext ctx = new UsersContext()) {
using (TransactionScope scope = new TransactionScope()) {
// The following call creates its own context but will call ctx.SaveChanges() internally
WebSecurity.CreateUserAndAccount(...);
// update some other tables using ctx
...
ctx.SaveChanges();
scope.complete();
}
}
我觉得这应该有效。但是,我想就是否有更好的方法得到你的专家意见。
提前感谢您的帮助。
的问候,
彼得
答案 0 :(得分:0)
TransactionScope
是在同一个事务中完成所有操作的最佳方法,但要小心你的连接字符串的定义方式(并在Azure上进行测试,如果你将它部署到那里),因为DTC可能在某些情况下(example)
替代方法是继承SimpleMembershipProvider
并覆盖CreateUserAndAccount
,因为这就是WebSecurity
调用的全部内容。然后,您可以通过复制和扩展SimpleMembershipProvider
代码在单个上下文中完成所有工作。