Чтобы создать общую транзакцию для IdentityDbContext и ApplicationDbContext в Asp.Net Core - PullRequest
1 голос
/ 06 июня 2019

У меня есть IdentityDbContext с пользователем и ролями, как показано ниже.

public class IdentityDbContext : IdentityDbContext<AdditionalIdentityUser, AdditionalApplicationRole, Guid>
{
    public IdentityDbContext(DbContextOptions<IdentityDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);            
    }
}

У меня есть ApplicationDbContext для других таблиц.

public partial class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
    {
    }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    public virtual DbSet<Table1> Table1 { get; set; }
    public virtual DbSet<Table2> Table2 { get; set; }
}

У меня есть код создания пользователя, в котором я используюи IdentityDbContext для создания записи о пользователе и роли, и Application Dbcontext для выполнения нескольких других обновлений.Я хочу сделать это за одну транзакцию.

Итак, у меня есть:

 public async Task<IActionResult> Create(CreateModel model)
{
    //context here is the context injected through dependency injection.
     using (var appdbContextTransaction = context.Database.BeginTransaction())
     {
         try
         {        

            //Creating using identity Context
            var user = await userManager.CreateAsync(model.User);

           //Random code which uses ApplicationDbContext
            var updateCount = context.Table1.Update();
            appdbContextTransaction .Commit();
        }
        catch (Exception ex)
        {
            appdbContextTransaction.Rollback();
        }
}

Но в исключении меняются только значения appdbcontext, а не значения, созданные с использованием идентификатора.Как создать одну всеобъемлющую транзакцию, которая может охватывать оба контекста?

РЕДАКТИРОВАТЬ: Этот вопрос кажется похожим, но ответ не помогает.

...