我有一个创建用户的复杂添加过程(并将角色+其他与用户相关的信息添加到其他表中)
在添加用户/角色或其他标识对象时,是否有人知道如何使用事务。我似乎无法访问"Database.BeginTransaction“
我有下面的UserManager类,我不知道如何访问基类“存储”
public class UserManager : UserManager<ApplicationUser>
{
public UserManager()
: base(new UserStore<ApplicationUser>(new ApplicationDbContext()))
{
//allows alphanumeric names in username
UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
}
}似乎没有办法访问UserManager.UserStore.Database.
谢谢
发布于 2013-10-29 12:24:42
ASP.NET标识框架的当前存储实现使用EntityFramework。DbContext是EF的核心,TransactionScope可以用于保存多个更改。
下面是EF代码第一DBContext和事务的一个示例
using(var scope = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
{
// Do something like Add a User
context.SaveChanges();
// Do something like Add a User to Role
context.SaveChanges();
scope.Complete();
}更新1: -为了访问DbContext.Database使用IdentityManager.Store.Context.Database -您可以使用相同的ConnectionString (而不是SqlConnection对象)跨多个DbContext使用相同的方法
此外,查看使用BeginTransaction的下一个链接。-> 如何在实体框架6 DbContext.Database.BeginTransaction中配置事务超时?
更新2:
使用EF6 BeginTransaction:处理事务(EF6以后)
在代码伪后面使用
ApplicationDbContext ctx = new ApplicationDbContext();
using (DbContextTransaction tran1 = ctx.Database.BeginTransaction())
{
using (MyDbContext ctx2 = new MyDbContext(ctx.Database.Connection, false))
{
ctx2.Database.UseTransaction(tran1.UnderlyingTransaction);
}
}来自http://msdn.microsoft.com/en-us/data/dn456843
注意:在此场景中调用时,必须将contextOwnsConnection标志设置为false。这一点很重要,因为它通知实体框架,当连接完成时,它不应该关闭它
https://stackoverflow.com/questions/19657667
复制相似问题