Open Closed

Error Running dotnet test for AdministrationService #10194


User avatar
0
vmquang95 created
  • Template: microservice
  • Created ABP Studio Version: 2.0.2
  • Current ABP Studio Version: 2.1.0
  • Multi-Tenancy: Yes
  • UI Framework: angular
  • Theme: leptonx
  • Theme Style: system
  • Theme Menu Placement: side
  • Run Install Libs: Yes
  • Database Provider: ef
  • Database Management System: postgresql
  • Mobile Framework: none
  • Public Website: No
  • Social Login: Yes
  • Include Tests: Yes
  • Dynamic Localization: Yes
  • Kubernetes Configuration: Yes
  • Grafana Dashboard: Yes
  • Use Local References: No
  • Aspire: No
  • Optional Modules:
    • FileManagement
    • TextTemplateManagement
    • AuditLogging
    • OpenIddictAdmin
  • Selected Languages: Vietnamese (Vietnam), English (United Kingdom)
  • Default Language: Vietnamese (Vietnam)
  • Create Command: abp new CsdlAttp -t microservice --ui-framework angular --database-provider ef --database-management-system postgresql --theme leptonx --skip-migrator --without-cms-kit --dont-run-bundling -no-gdpr -no-language-management -file-management
  • Exception message and full stack trace: CsdlAttp.AdministrationService.Tests test net10.0 failed with 2 error(s) (6.9s) D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\bin\Debug\net10.0\CsdlAttp.AdministrationService.Tests.dll : error TESTERROR: CsdlAttp.AdministrationService.Tests.Controllers.DemoController_Tests.HelloWorld (5s 9ms): Error Message: Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'no such table: AbpLanguages'. Stack Trace: at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellat ionToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync() at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable1 source, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable1 source, CancellationToken cancellationToken) at Volo.Abp.LanguageManagement.EntityFrameworkCore.EfCoreLanguageRepository.GetListByIsEnabledAsync(Boolean isEnabled, CancellationToken cancellationToken) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.Abp.LanguageManagement.DatabaseLanguageProvider.q5L442B2Z() at Volo.Abp.Caching.DistributedCache2.GetOrAddAsync(TCacheKey key, Func1 factory, Func1 optionsFactory, Nullable1 hideErrors, Boolean considerUow, CancellationToke n token) at Volo.Abp.LanguageManagement.DatabaseLanguageProvider.GetLanguagesAsync() at Microsoft.AspNetCore.RequestLocalization.DefaultAbpRequestLocalizationOptionsProvider.GetLocalizationOptionsAsync() at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.TestHost.HttpContextBuilder.<>c__DisplayClass23_0.<<SendAsync>g__RunRequestAsync|0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.TestHost.ClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCt s, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) at CsdlAttp.AdministrationService.Tests.AdministrationServiceIntegrationTestBase.GetResponseAsync(String url, HttpStatusCode expectedStatusCode) in D:\csdl-attp\servic es\administration\CsdlAttp.AdministrationService.Tests\AdministrationServiceIntegrationTestBase.cs:line 34 at CsdlAttp.AdministrationService.Tests.AdministrationServiceIntegrationTestBase.GetResponseAsStringAsync(String url, HttpStatusCode expectedStatusCode) in D:\csdl-att p\services\administration\CsdlAttp.AdministrationService.Tests\AdministrationServiceIntegrationTestBase.cs:line 26 at CsdlAttp.AdministrationService.Tests.Controllers.DemoController_Tests.HelloWorld() in D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\Cont rollers\DemoController_Tests.cs:line 17 --- End of stack trace from previous location --- D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\bin\Debug\net10.0\CsdlAttp.AdministrationService.Tests.dll : error TESTERROR: CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions (5s 46ms): Error Message: Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'no such table: AbpLanguageTexts'. Stack Trace: at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior behavior) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.InitializeReader(Enumerator enumerator) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__22_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.Storage.NonRetryingExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Volo.Abp.LanguageManagement.EntityFrameworkCore.EfCoreLanguageTextRepository.GetList(String resourceName, String cultureName) at Castle.Proxies.Invocations.ILanguageTextRepository_GetList.InvokeMethodOnTarget() at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.DynamicProxy.AbstractInvocation.ProceedInfo.Invoke() at Castle.DynamicProxy.AsyncInterceptorBase.ProceedSynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) --- End of stack trace from previous location --- at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed at Castle.Proxies.IBasicRepository1Proxy_7.GetList(String resourceName, String cultureName) at Volo.Abp.LanguageManagement.DynamicResourceLocalizer.CreateCacheItem(LocalizationResourceBase resource, String cultureName) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, IAuditingHelper auditingHelper, IAuditLogSc ope auditLogScope) at Volo.Abp.Auditing.AuditingInterceptor.ProcessWithNewAuditingScopeAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, ICurrentUser currentUser, IAudit ingManager auditingManager, IAuditingHelper auditingHelper, IUnitOfWorkManager unitOfWorkManager) at Volo.Abp.Auditing.AuditingInterceptor.ProcessWithNewAuditingScopeAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, ICurrentUser currentUser, IAudit ingManager auditingManager, IAuditingHelper auditingHelper, IUnitOfWorkManager unitOfWorkManager) at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions() in D:\csdl-attp\services\administration\CsdlAttp.Admini strationService.Tests\ApplicationServices\PermissionAppService_Tests.cs:line 26 --- End of stack trace from previous location ---

  • Steps to reproduce the issue: Hello ABP support team,

Our project is encountering an issue related to testing. The project requirement is that all services must pass dotnet test. However, among all the services, AdministrationService fails when running dotnet test. In the output, the error indicates that several tables related to Languages are missing. Specifically: Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: AbpLanguages' Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: AbpLanguageTexts'. CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions (5s 46ms):
Error Message: Microsoft.Data.Sqlite.SqliteException: SQLite Error 1: 'no such table: AbpLanguageTexts'.

Based on the ABP documentation (https://abp.io/docs/latest/framework/data/entity-framework-core/migrations ) and the ABP AI assistant, it seems I need to manually add the table creation logic for the Language module inside the AdministrationServiceTestsModule.

I would like to confirm with the ABP support team: What is the root cause of this issue, and what is the recommended way to fix it? Thank you.

volo.abp.studio.cli 2.1.0 abp volo.abp.suite 10.0.0 abp-suite


9 Answer(s)
  • User Avatar
    0
    AI-Bot created
    Support Team ABP Agent
    1. Solution
    • Root cause

      • Your AdministrationService integration tests run with a single in‑memory SQLite connection and only create tables for the service’s own DbContexts (AdministrationServiceDbContext and BlobStoringDbContext).
      • The failing tests hit ABP Language Management (DatabaseLanguageProvider and EfCoreLanguageRepository), which uses its own EF Core DbContext (LanguageManagementDbContext). Since your test setup doesn’t create tables for that DbContext, SQLite throws “no such table: AbpLanguages/AbpLanguageTexts”.
    • Recommended fix (create tables for every EF Core module DbContext used during tests)

      • Ensure the test module depends on the EF Core package of the used module(s). For Language Management:
        • Add a reference to Volo.Abp.LanguageManagement.EntityFrameworkCore in your AdministrationService.EntityFrameworkCore.Tests project (or your Web/Host test project if that’s where the failing tests live).
      • In your test module where you configure the in‑memory SQLite connection, configure the same connection for LanguageManagementDbContext and create its tables using IRelationalDatabaseCreator.CreateTables().

      Example (extend your existing CreateDatabaseAndGetConnection and service configuration):

    using Microsoft.Data.Sqlite;
      using Microsoft.EntityFrameworkCore;
      using Microsoft.EntityFrameworkCore.Infrastructure;
      using Microsoft.EntityFrameworkCore.Storage;
      using Microsoft.Extensions.DependencyInjection;
      using Volo.Abp.EntityFrameworkCore;
      using Volo.Abp.Modularity;
      using Volo.Abp.LanguageManagement.EntityFrameworkCore;
    
      [DependsOn(
          typeof(AdministrationServiceEntityFrameworkCoreModule),
          typeof(AbpEntityFrameworkCoreSqliteModule),
          typeof(AbpLanguageManagementEntityFrameworkCoreModule) // add this
      )]
      public class AdministrationServiceEntityFrameworkCoreTestModule : AbpModule
      {
          public override void ConfigureServices(ServiceConfigurationContext context)
          {
              var sqliteConnection = CreateDatabaseAndGetConnection();
    
              Configure<AbpDbContextOptions>(options =>
              {
                  options.Configure<AdministrationServiceDbContext>(c =>
                  {
                      c.DbContextOptions.UseSqlite(sqliteConnection);
                  });
    
                  options.Configure<BlobStoringDbContext>(c =>
                  {
                      c.DbContextOptions.UseSqlite(sqliteConnection);
                  });
    
                  // configure LanguageManagementDbContext to use the same connection
                  options.Configure<LanguageManagementDbContext>(c =>
                  {
                      c.DbContextOptions.UseSqlite(sqliteConnection);
                  });
              });
          }
    
          private static SqliteConnection CreateDatabaseAndGetConnection()
          {
              var connection = new SqliteConnection("Data Source=:memory:");
              connection.Open();
    
              // AdministrationService
              new AdministrationServiceDbContext(
                  new DbContextOptionsBuilder<AdministrationServiceDbContext>().UseSqlite(connection).Options
              ).GetService<IRelationalDatabaseCreator>().CreateTables();
    
              // BlobStoring
              new BlobStoringDbContext(
                  new DbContextOptionsBuilder<BlobStoringDbContext>().UseSqlite(connection).Options
              ).GetService<IRelationalDatabaseCreator>().CreateTables();
    
              // LanguageManagement: creates AbpLanguages, AbpLanguageTexts, etc.
              new LanguageManagementDbContext(
                  new DbContextOptionsBuilder<LanguageManagementDbContext>().UseSqlite(connection).Options
              ).GetService<IRelationalDatabaseCreator>().CreateTables();
    
              return connection;
          }
      }
    
    • Notes
      • This same pattern applies to any ABP module that introduces its own DbContext and is used during your tests (e.g., SettingManagementDbContext, TextTemplateManagementDbContext, etc.). Add the module’s EF Core package to the test project, configure the DbContext to share the SQLite connection, and call CreateTables() for it in your test setup.
      • You do not need to write custom “table creation logic” beyond calling CreateTables() for each involved DbContext; ABP’s and EF Core’s metadata define the schema.
    1. Sources
    • https://abp.io/docs/latest/framework/data/entity-framework-core/migrations
    • https://abp.io/support/questions/5285
    • https://abp.io/support/questions/1737

    This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    Please update the CreateDatabaseAndGetConnection as below

       
    private static SqliteConnection CreateDatabaseAndGetConnection()
    {
        var connection = new SqliteConnection("Data Source=:memory:");
        connection.Open();
    
        // AdministrationServiceDbContext ()
        new AdministrationServiceDbContext(
            new DbContextOptionsBuilder<AdministrationServiceDbContext>().UseSqlite(connection).Options
        ).GetService<IRelationalDatabaseCreator>().CreateTables();
        
        // BlobStoringDbContext
        new BlobStoringDbContext(
            new DbContextOptionsBuilder<BlobStoringDbContext>().UseSqlite(connection).Options
        ).GetService<IRelationalDatabaseCreator>().CreateTables();
        
        // LanguageManagementDbContext ()
        new LanguageManagementDbContext(
            new DbContextOptionsBuilder<LanguageManagementDbContext>().UseSqlite(connection).Options
        ).GetService<IRelationalDatabaseCreator>().CreateTables();
        
        return connection;
    }
    

    Thanks.

  • User Avatar
    0
    vmquang95 created

    [maliming] said: hi

    Please update the CreateDatabaseAndGetConnection as below

        
    private static SqliteConnection CreateDatabaseAndGetConnection() 
    { 
        var connection = new SqliteConnection("Data Source=:memory:"); 
        connection.Open(); 
     
        // AdministrationServiceDbContext () 
        new AdministrationServiceDbContext( 
            new DbContextOptionsBuilder<AdministrationServiceDbContext>().UseSqlite(connection).Options 
        ).GetService<IRelationalDatabaseCreator>().CreateTables(); 
         
        // BlobStoringDbContext 
        new BlobStoringDbContext( 
            new DbContextOptionsBuilder<BlobStoringDbContext>().UseSqlite(connection).Options 
        ).GetService<IRelationalDatabaseCreator>().CreateTables(); 
         
        // LanguageManagementDbContext () 
        new LanguageManagementDbContext( 
            new DbContextOptionsBuilder<LanguageManagementDbContext>().UseSqlite(connection).Options 
        ).GetService<IRelationalDatabaseCreator>().CreateTables(); 
         
        return connection; 
    } 
    

    Thanks.

    Hello maliming, I followed your instructions. After running dotnet test, the errors related to the missing AbpLanguages and AbpLanguageTexts tables were resolved. However, the testing process is now taking a very long time and continues running without producing any results.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    I will check it again

    Thanks

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    Configure<AbpExternalLocalizationOptions>(options =>
    {
    
        options.SaveToExternalStore = false;
    });
    

  • User Avatar
    0
    vmquang95 created

    [maliming] said: hi

    Configure<AbpExternalLocalizationOptions>(options => 
    {
     
        options.SaveToExternalStore = false; 
    }); 
    

    Thanks, maliming. I followed the solution you provided and it resolved the issue.

    new LanguageManagementDbContext(
        new DbContextOptionsBuilder<LanguageManagementDbContext>().UseSqlite(connection).Options
    ).GetService<IRelationalDatabaseCreator>().CreateTables();
    
    Configure<AbpExternalLocalizationOptions>(options =>
    {
        options.SaveToExternalStore = false;
    });
    

    I would like to understand why these steps need to be added manually. Without them, the tests fail. Shouldn’t ABP automatically handle this when generating a new project, so that the testing environment works out of the box?

    Could you please clarify why this behavior occurs and whether it is expected?

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    I have fixed this in the Studio template; the next version will be no problem.

    Thanks.

  • User Avatar
    0
    vmquang95 created

    [maliming] said: hi

    I have fixed this in the Studio template; the next version will be no problem.

    Thanks.

    Thanks.

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    : )

Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.1.0-preview. Updated on December 10, 2025, 12:02
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.