Activities of "jeffbuot"

  • ABP Framework version: v5.3.0
  • Project type: Abp Microservice Template
  • DB provider: MongoDB
  • Exception message and stack trace:
[06:01:55 ERR] ---------- RemoteServiceErrorInfo ----------
{
  "code": null,
  "message": "An internal error occurred during your request!",
  "details": null,
  "data": {},
  "validationErrors": null
}

[06:01:55 ERR] Command aggregate failed: PlanExecutor error during aggregation :: caused by :: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to o
pt in..
MongoDB.Driver.MongoCommandException: Command aggregate failed: PlanExecutor error during aggregation :: caused by :: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass
 allowDiskUse:true to opt in..
   at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ProcessResponse(ConnectionId connectionId, CommandMessage responseMessage)
   at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ExecuteAsync(IConnection connection, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocolAsync[TResult](IWireProtocol`1 protocol, ICoreSession session, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Operations.RetryableReadOperationExecutor.ExecuteAsync[TResult](IRetryableReadOperation`1 operation, RetryableReadContext context, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Operations.ReadCommandOperation`1.ExecuteAsync(RetryableReadContext context, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Operations.AggregateOperation`1.ExecuteAsync(RetryableReadContext context, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Operations.AggregateOperation`1.ExecuteAsync(IReadBinding binding, CancellationToken cancellationToken)
   at MongoDB.Driver.OperationExecutor.ExecuteReadOperationAsync[TResult](IReadBinding binding, IReadOperation`1 operation, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoCollectionImpl`1.ExecuteReadOperationAsync[TResult](IClientSessionHandle session, IReadOperation`1 operation, ReadPreference readPreference, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoCollectionImpl`1.AggregateAsync[TResult](IClientSessionHandle session, PipelineDefinition`2 pipeline, AggregateOptions options, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSessionAsync[TResult](Func`2 funcAsync, CancellationToken cancellationToken)
   at MongoDB.Driver.IAsyncCursorSourceExtensions.ToListAsync[TDocument](IAsyncCursorSource`1 source, CancellationToken cancellationToken)
   at CMVPoint.ProductService.Products.MongoDbProductRepository.GetListAsync(String filterText, String name, Nullable`1 priceMin, Nullable`1 priceMax, String sorting, Int32 maxResultCount, Int32 skipCount, CancellationToken cance
llationToken) in D:\Projects\cmvpoint-initial-code\services\product\src\CMVPoint.ProductService.MongoDB\Products\MongoDbProductRepository.cs:line 35
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at CMVPoint.ProductService.Products.ProductAppService.GetListAsync(GetProductsInput input) in D:\Projects\cmvpoint-initial-code\services\product\src\CMVPoint.ProductService.Application\Products\ProductAppService.cs:line 24
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, IAuditingHelper auditingHelper, IAuditLogScope auditLogScope)
   at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at lambda_method1317(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
  • Steps to reproduce the issue:"
  • Create new microservice project from abp suite
  • Change the database context of all microservices from efcore sqlserver to mongo db by following this steps from: https://docs.abp.io/en/commercial/latest/guides/microservice-mongodb
  • Run all services
  • Seed approx 300k or more product data to ProductService.HttpApi.Host
  • Adjust the LimitedResultRequestDto.DefaultMaxResultCount to a large number e.g.200000
  • Use the ProductService.HttpApi.Client for client remote service using WPF
  • Get the data using the client proxy GetListAsync() multiple times with SkipCount up to TotalCount

How can I avoid this issue?

hi

Add MyMultiTenantConnectionStringResolver to your CMVPoint.IdentityService.MongoDB project, I will fix this in 5.3 patch version.

using System; 
using System.Threading.Tasks; 
using Microsoft.Extensions.Options; 
using Volo.Abp.Data; 
using Volo.Abp.DependencyInjection; 
using Volo.Abp.MultiTenancy; 
 
namespace CMVPoint.IdentityService.MongoDb; 
 
[Dependency(ReplaceServices = true)] 
public class MyMultiTenantConnectionStringResolver : MultiTenantConnectionStringResolver 
{ 
    public MyMultiTenantConnectionStringResolver( 
        IOptionsMonitor<AbpDbConnectionOptions> options, 
        ICurrentTenant currentTenant, 
        IServiceProvider serviceProvider) 
        : base(options, currentTenant, serviceProvider) 
    { 
    } 
 
    public override Task<string> ResolveAsync(string connectionStringName = null) 
    { 
        if (connectionStringName == "Volo.Abp.Identity.MongoDB.IdentityProMongoDbContext") 
        { 
            return base.ResolveAsync("AbpIdentity"); 
        } 
        return base.ResolveAsync(connectionStringName); 
    } 
 
    public override string Resolve(string connectionStringName = null) 
    { 
        if (connectionStringName == "Volo.Abp.Identity.MongoDB.IdentityProMongoDbContext") 
        { 
            return base.Resolve("AbpIdentity"); 
        } 
 
        return base.Resolve(connectionStringName); 
    } 
} 
 

Hi, thanks issue has been resolved.

hi

Can you share the source code with me? liming.ma@volosoft.com

I invited you to a private github repo.

Hi,

I checked the value of connectionStringResolver and this is what I got:

Exception occurs on await _identityServerDataSeeder.SeedAsync(); I already added the [ConnectionStringName(IdentityServiceDbProperties.ConnectionStringName)] attribute to IdentityServiceMongoDbContext

  • ABP Framework version: v5.3.0
  • Project type: Abp Microservice Template
  • DB provider: MongoDB
  • Exception message and stack trace:
System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString')
   at MongoDB.Driver.Core.Misc.Ensure.IsNotNull[T](T value, String paramName)
   at MongoDB.Driver.Core.Configuration.ConnectionString..ctor(String connectionString, Boolean isInternalRepresentation, IDnsResolver dnsResolver)
   at MongoDB.Driver.Core.Configuration.ConnectionString..ctor(String connectionString)
   at MongoDB.Driver.MongoUrlBuilder.Parse(String url)
   at MongoDB.Driver.MongoUrlBuilder..ctor(String url)
   at MongoDB.Driver.MongoUrl..ctor(String url)
   at Volo.Abp.Uow.MongoDB.UnitOfWorkMongoDbContextProvider`1.GetDbContextAsync(CancellationToken cancellationToken)
   at Volo.Abp.Domain.Repositories.MongoDB.MongoDbRepository`2.GetMongoQueryableAsync[TOtherEntity](CancellationToken cancellationToken)
   at Volo.Abp.Identity.MongoDB.MongoIdentityClaimTypeRepository.AnyAsync(String name, Nullable`1 ignoredId, CancellationToken cancellationToken)
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
   at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at Volo.Abp.IdentityServer.IdentityResources.IdentityResourceDataSeeder.AddClaimTypeIfNotExistsAsync(String claimType)
   at Volo.Abp.IdentityServer.IdentityResources.IdentityResourceDataSeeder.CreateStandardResourcesAsync()
   at ProjectName.IdentityService.DbMigrations.IdentityServerDataSeeder.SeedAsync() in /Users/jeffb/Projects/projectname/services/identity/src/ProjectName.IdentityService.HttpApi.Host/DbMigrations/IdentityServerDataSeeder.cs:line 72
   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo)
   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync()
   at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
   at ProjectName.IdentityService.DbMigrations.IdentityServiceDataSeeder.SeedAsync(Nullable`1 tenantId, String adminEmail, String adminPassword) in /Users/jeffb/Projects/projectname/services/identity/src/PorjectName.IdentityService.HttpApi.Host/DbMigrations/IdentityServiceDataSeeder.cs:line 64
  • Steps to reproduce the issue:"
  • Create new microservice project from abp suite
  • Change the database context of all microservices from efcore sqlserver to mongo db by following this steps from: https://docs.abp.io/en/commercial/latest/guides/microservice-mongodb
  • Run the ProjectName.IdentityService.HttpApi.Host

On Identity Mongo interface:

public interface IIdentityProMongoDbContext : IAbpIdentityMongoDbContext, IAbpMongoDbContext
{
}
public interface IAbpIdentityMongoDbContext : IAbpMongoDbContext
{
    IMongoCollection<IdentityUser> Users { get; }

    IMongoCollection<IdentityRole> Roles { get; }

    IMongoCollection<IdentityClaimType> ClaimTypes { get; }

    IMongoCollection<OrganizationUnit> OrganizationUnits { get; }

    IMongoCollection<IdentitySecurityLog> SecurityLogs { get; }

    IMongoCollection<IdentityLinkUser> LinkUsers { get; }
}

Identity Efcore Interface

public interface IIdentityServerDbContext : IEfCoreDbContext
{
    #region ApiResource

    DbSet<ApiResource> ApiResources { get; }

    DbSet<ApiResourceSecret> ApiResourceSecrets { get; }

    DbSet<ApiResourceClaim> ApiResourceClaims { get; }

    DbSet<ApiResourceScope> ApiResourceScopes { get; }

    DbSet<ApiResourceProperty> ApiResourceProperties { get; }

    #endregion

    #region ApiScope

    DbSet<ApiScope> ApiScopes { get; }

    DbSet<ApiScopeClaim> ApiScopeClaims { get; }

    DbSet<ApiScopeProperty> ApiScopeProperties { get; }

    #endregion

    #region IdentityResource

    DbSet<IdentityResource> IdentityResources { get; }

    DbSet<IdentityResourceClaim> IdentityClaims { get; }

    DbSet<IdentityResourceProperty> IdentityResourceProperties { get; }

    #endregion

    #region Client

    DbSet<Client> Clients { get; }

    DbSet<ClientGrantType> ClientGrantTypes { get; }

    DbSet<ClientRedirectUri> ClientRedirectUris { get; }

    DbSet<ClientPostLogoutRedirectUri> ClientPostLogoutRedirectUris { get; }

    DbSet<ClientScope> ClientScopes { get; }

    DbSet<ClientSecret> ClientSecrets { get; }

    DbSet<ClientClaim> ClientClaims { get; }

    DbSet<ClientIdPRestriction> ClientIdPRestrictions { get; }

    DbSet<ClientCorsOrigin> ClientCorsOrigins { get; }

    DbSet<ClientProperty> ClientProperties { get; }

    #endregion

    DbSet<PersistedGrant> PersistedGrants { get; }

    DbSet<DeviceFlowCodes> DeviceFlowCodes { get; }
}

Why are some of those collections missing on the mongo interface?

For example the IdentityService: *.MongoDb based from your example:

//using ...

namespace ProjectName.IdentityService.MongoDb;

[ConnectionStringName(IdentityServiceDbProperties.ConnectionStringName)]
public class IdentityServiceDbContext : AbpMongoDbContext,
    IIdentityServiceDbContext,
    IIdentityProMongoDbContext, 
    IAbpIdentityServerMongoDbContext
{
    public IMongoCollection<IdentityUser> Users { get; }
    public IMongoCollection<IdentityRole> Roles { get; }
    public IMongoCollection<IdentityClaimType> ClaimTypes { get; }
    public IMongoCollection<OrganizationUnit> OrganizationUnits { get; }
    public IMongoCollection<IdentitySecurityLog> SecurityLogs { get; }
    public IMongoCollection<IdentityLinkUser> LinkUsers { get; }
    public IMongoCollection<ApiResource> ApiResources { get; }
    public IMongoCollection<ApiScope> ApiScopes { get; }
    public IMongoCollection<Client> Clients { get; }
    public IMongoCollection<IdentityResource> IdentityResources { get; }
    public IMongoCollection<PersistedGrant> PersistedGrants { get; }
    public IMongoCollection<DeviceFlowCodes> DeviceFlowCodes { get; }
    
   //Create Model
}

On EFCore:

//using ...

namespace ProjectName.IdentityService.EntityFramework;

[ConnectionStringName(IdentityServiceDbProperties.ConnectionStringName)]
public class IdentityServiceDbContext : AbpDbContext<IdentityServiceDbContext>, IIdentityDbContext, IIdentityServerDbContext
{
    public DbSet<IdentityUser> Users { get; set; }
    public DbSet<IdentityRole> Roles { get; set; }
    public DbSet<IdentityClaimType> ClaimTypes { get; set; }
    public DbSet<OrganizationUnit> OrganizationUnits { get; set; }
    public DbSet<IdentitySecurityLog> SecurityLogs { get; set; }
    public DbSet<IdentityLinkUser> LinkUsers { get; set; }
    public DbSet<ApiResource> ApiResources { get; set; }
    public DbSet<ApiResourceSecret> ApiResourceSecrets { get; set; }
    public DbSet<ApiResourceClaim> ApiResourceClaims { get; set; }
    public DbSet<ApiResourceScope> ApiResourceScopes { get; set; }
    public DbSet<ApiResourceProperty> ApiResourceProperties { get; set; }
    public DbSet<ApiScope> ApiScopes { get; set; }
    public DbSet<ApiScopeClaim> ApiScopeClaims { get; set; }
    public DbSet<ApiScopeProperty> ApiScopeProperties { get; set; }
    public DbSet<IdentityResource> IdentityResources { get; set; }
    public DbSet<IdentityResourceClaim> IdentityClaims { get; set; }
    public DbSet<IdentityResourceProperty> IdentityResourceProperties { get; set; }
    public DbSet<Client> Clients { get; set; }
    public DbSet<ClientGrantType> ClientGrantTypes { get; set; }
    public DbSet<ClientRedirectUri> ClientRedirectUris { get; set; }
    public DbSet<ClientPostLogoutRedirectUri> ClientPostLogoutRedirectUris { get; set; }
    public DbSet<ClientScope> ClientScopes { get; set; }
    public DbSet<ClientSecret> ClientSecrets { get; set; }
    public DbSet<ClientClaim> ClientClaims { get; set; }
    public DbSet<ClientIdPRestriction> ClientIdPRestrictions { get; set; }
    public DbSet<ClientCorsOrigin> ClientCorsOrigins { get; set; }
    public DbSet<ClientProperty> ClientProperties { get; set; }
    public DbSet<PersistedGrant> PersistedGrants { get; set; }
    public DbSet<DeviceFlowCodes> DeviceFlowCodes { get; set; }

    // Constructor
    // OnModelCreating
}

You can see there are collections that are not on the mongodbcontext. I can't seem to find interface for mongo that has the same required collections from Volo.Abp.IdentityServer.EntityFrameworkCore.IIdentityServerDbContext

One more related question, why do there are some collections missing on mongodb interface over efcore? e.g. IPaymentDbContext has DbSet<GatewayPlan> GatewayPlans { get; } but GatewayPlans mongo collection is not present on IPaymentMongoDbContext? Same with some interface collections on IdentityServiceDbContext over IdentityServiceDbContext.

Oh I see, that helps. Thanks a lot!

Hi, gterdem thanks for the response. How about this one, I see IPermissionManagementDbContext inherits IEfCoreDbContext and also the others. Q1: What are the existing interface for MongoDB that is equivalent to IPermissionManagementDbContext, ISettingManagementDbContext, etc.. that inherits IAbpMongoDbContext? Q2: The model builder configuration here are from Volo.Abp.*.EntityFrameworkCore namespace, are there also ones equivalent for MongoDB?

using Microsoft.EntityFrameworkCore;
using Volo.Abp.AuditLogging;
using Volo.Abp.AuditLogging.EntityFrameworkCore;
using Volo.Abp.BlobStoring.Database;
using Volo.Abp.BlobStoring.Database.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.FeatureManagement;
using Volo.Abp.FeatureManagement.EntityFrameworkCore;
using Volo.Abp.LanguageManagement;
using Volo.Abp.LanguageManagement.EntityFrameworkCore;
using Volo.Abp.PermissionManagement;
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
using Volo.Abp.SettingManagement;
using Volo.Abp.SettingManagement.EntityFrameworkCore;
using Volo.Abp.TextTemplateManagement.EntityFrameworkCore;
using Volo.Abp.TextTemplateManagement.TextTemplates;

namespace ProjectName.AdministrationService.EntityFrameworkCore;

[ConnectionStringName(AdministrationServiceDbProperties.ConnectionStringName)]
public class AdministrationServiceDbContext : AbpDbContext<AdministrationServiceDbContext>,
    IPermissionManagementDbContext,
    ISettingManagementDbContext,
    IFeatureManagementDbContext,
    IAuditLoggingDbContext,
    ILanguageManagementDbContext,
    ITextTemplateManagementDbContext,
    IBlobStoringDbContext
{
    public DbSet<PermissionGrant> PermissionGrants { get; set; }
    public DbSet<Setting> Settings { get; set; }
    public DbSet<FeatureValue> FeatureValues { get; set; }
    public DbSet<AuditLog> AuditLogs { get; set; }
    public DbSet<Language> Languages { get; set; }
    public DbSet<LanguageText> LanguageTexts { get; set; }
    public DbSet<TextTemplateContent> TextTemplateContents { get; set; }
    public DbSet<DatabaseBlobContainer> BlobContainers { get; set; }
    public DbSet<DatabaseBlob> Blobs { get; set; }

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

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.ConfigurePermissionManagement();
        modelBuilder.ConfigureSettingManagement();
        modelBuilder.ConfigureFeatureManagement();
        modelBuilder.ConfigureAuditLogging();
        modelBuilder.ConfigureLanguageManagement();
        modelBuilder.ConfigureTextTemplateManagement();
        modelBuilder.ConfigureBlobStoring();
    }
}

Cheers, Jeff B

Showing 51 to 60 of 61 entries
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 October 30, 2025, 06:33