EF Core IdentityDbContext 中的 SaveChangesAsync

Nal*_*526 4 c# asp.net-identity entity-framework-core .net-core

我正在尝试在 ASP.NET Core 应用程序中使用 Entity Framework Core Identity

我创建了数据库上下文及其接口,如下所示:

public class AppDbContext : IdentityDbContext<AppUser>, IAppDbContext
{
    public AppDbContext (DbContextOptions<AppDbContext> options) : base(options)
    { }

    public DbSet<AppUser> AppUser { get; set; }

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

public interface IAppDbContext
{
    DbSet<AppUser> AppUser { get; set; }

    int SaveChanges();
    Task<int> SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,它显示了一个错误AppDbContext,说明

'AppDbContext' 没有实现接口成员 'IAppDbContext.SaveChangesAsync()'

如果AppDbContext从继承DbContextinsted的的IdentityDbContext错误不会出现,但使用的身份应该被继承IdentityDbContext

我怎样才能解决这个问题?

Vla*_*lad 7

这很奇怪,因为在这两种情况下都应该显示此错误。无论如何,DbContext没有方法:

Task<int> SaveChangesAsync()
Run Code Online (Sandbox Code Playgroud)

它有方法:

Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
Run Code Online (Sandbox Code Playgroud)

要解决这种情况,您应该包装DbContext.SaveChangesAsync方法:

public class AppDbContext : IdentityDbContext<AppUser>, IAppDbContext
{
    ...

    public Task<int> SaveChangesAsync() => base.SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud)