У меня есть 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, а не значения, созданные с использованием идентификатора.Как создать одну всеобъемлющую транзакцию, которая может охватывать оба контекста?
РЕДАКТИРОВАТЬ: Этот вопрос кажется похожим, но ответ не помогает.