ASP.NET Identity 框架的当前存储实现使用 EntityFramework。DbContext 是 EF 的核心,其中 TransactionScope 可用于保存多个更改。
以下是EF Code First DBContext 和 Transactions的示例
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 的用法。->如何在 Entity Framework 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);
}
}
从使用事务(EF6 起)
注意:在这种情况下调用时,contextOwnsConnection 标志必须设置为 false。这很重要,因为它通知实体框架它在完成连接后不应关闭连接