Activities of "chrisalves"

After you revisit the screenshots of the Mappers, you will see the ignore for the output. I believe this is the reason for this issue. If there is any complement on your suggestion above that handles correctly the output for the child please bring clearer than your previous response.

Hi!

I tried to use the suggested way but the Mapper is set to Ignore the output.Can you please revisit the screenshots of the Mapper to ensure there is a right link between your suggestion and the existing Mapper. Just to enforce the context, the Mapper was created using ABP Suite templates.

After trying to debug the issue, I found some possible cause:

a) The mapper created by ABP Suite is ignoring the child entities that I need to be returned. See the picture below:

b) Something is missing at the Repository created by default using ABP Suite.

  • Template: app
  • Created ABP Studio Version: 0.9.25
  • Current ABP Studio Version: 1.4.1
  • Tiered: Yes
  • Multi-Tenancy: Yes
  • UI Framework: blazor-server
  • Theme: leptonx
  • Theme Style: system
  • Run Install Libs: Yes
  • Database Provider: ef
  • Database Management System: sqlserver
  • Separate Tenant Schema: Yes
  • Create Initial Migration: Yes
  • Run Db Migrator: Yes
  • Mobile Framework: maui
  • Public Website: Yes
  • Include Tests: Yes
  • Kubernetes Configuration: No
  • Distributed Event Bus: rabbitmq
  • Use Local References: No
  • Optional Modules:
    • GDPR
    • FileManagement
    • TextTemplateManagement
    • LanguageManagement
    • AuditLogging
    • Chat
    • OpenIddictAdmin
  • Exception message and full stack trace: Description:

Hello Abp.io Team,

I have encountered an issue with the GET endpoints generated by the ABP Suite for my entities containing child collections. My expectation is that when fetching an entity that has related child collections, these collections should be populated and returned in the response, as demonstrated in the auto-generated Swagger documentation.

Issue Details:

  • According to the Swagger example response for GET /product-items/{id} (see Figure 1), the returned object should include both the productItemCultures and productItemAttributeListValues collections alongside the main ProductItem entity.
  • However, when making an actual API request (see Figure 2) for a specific item (Cerveja Amstel Lager Puro Malte Lata 269ml), the response contains the ProductItem details, but both productItemCultures and productItemAttributeListValues arrays are empty, despite the related data existing.
  • As shown in Figure 3, these child data entries (attribute list values, for example) are indeed linked to the corresponding ProductItem in the database/UI, but they are not being returned by the API.

Images:

  • Image 1: Example return in Swagger documentation (expected structure with child collections returned).

  • Image 2: Actual API response (missing child collections, only main ProductItem information returned).

  • Image 3: UI/database evidence that ProductItem has attached Attribute List Values and Cultures.

Code Context (generated by ABP Suite, unmodified):

ProductItemsAppService.cs:

public virtual async Task<ProductItemDto> GetAsync(Guid id)
{
   return ObjectMapper.Map<ProductItem, ProductItemDto>(await _productItemRepository.GetAsync(id));
}

ProductItemDto.cs:

public abstract class ProductItemDtoBase : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{
   public string? BusinessGroupId { get; set; }
   public string? BusinessGroupTitle { get; set; }
   public string? ProductTypeId { get; set; }
   public string? ProductId { get; set; }
   public string? globalProductItemId { get; set; }
   public string Title { get; set; } = null!;
   public string? Description { get; set; }
   public Guid? ImageId { get; set; }
   public Guid? QRCodeId { get; set; }
   public bool HasComponent { get; set; }
   public bool IsIndustrialized { get; set; }
   public bool IsService { get; set; }
   public bool IsRental { get; set; }
   public bool IsBundle { get; set; }
   public string? GTIN { get; set; }
   public string? RegionalId { get; set; }
   public string? SKU { get; set; }
   public string? IntegrationId { get; set; }
   public string? SEO { get; set; }
   public bool IsActive { get; set; }
   public string? Culture { get; set; }
   public Guid CategoryId { get; set; }

   public string ConcurrencyStamp { get; set; } = null!;

   public List<ProductItemCultureDto> ProductItemCultures { get; set; } = new();
   public List<ProductItemAttributeListValueDto> ProductItemAttributeListValues { get; set; } = new();
}

ProductItem.cs:

public abstract class ProductItemBase : FullAuditedAggregateRoot<Guid>, IMultiTenant
{
   public virtual Guid? TenantId { get; set; }

   [CanBeNull]
   public virtual string? BusinessGroupId { get; set; }

   [CanBeNull]
   public virtual string? BusinessGroupTitle { get; set; }

   [CanBeNull]
   public virtual string? ProductTypeId { get; set; }

   [CanBeNull]
   public virtual string? ProductId { get; set; }

   [CanBeNull]
   public virtual string? globalProductItemId { get; set; }

   [NotNull]
   public virtual string Title { get; set; }

   [CanBeNull]
   public virtual string? Description { get; set; }

   public virtual Guid? ImageId { get; set; }

   public virtual Guid? QRCodeId { get; set; }

   public virtual bool HasComponent { get; set; }

   public virtual bool IsIndustrialized { get; set; }

   public virtual bool IsService { get; set; }

   public virtual bool IsRental { get; set; }

   public virtual bool IsBundle { get; set; }

   [CanBeNull]
   public virtual string? GTIN { get; set; }

   [CanBeNull]
   public virtual string? RegionalId { get; set; }

   [CanBeNull]
   public virtual string? SKU { get; set; }

   [CanBeNull]
   public virtual string? IntegrationId { get; set; }

   [CanBeNull]
   public virtual string? SEO { get; set; }

   public virtual bool IsActive { get; set; }

   [CanBeNull]
   public virtual string? Culture { get; set; }
   public Guid CategoryId { get; set; }
   public ICollection<ProductItemCulture> ProductItemCultures { get; private set; }
   public ICollection<ProductItemAttributeListValues.ProductItemAttributeListValue> ProductItemAttributeListValues { get; private set; }
}

The repository method used here is the default from ABP:

await _productItemRepository.GetAsync(id)

I have not made any modifications to the generated service, DTO, or entity code.

Expectation vs. Reality:

  • Expected: The API response should return the associated child collections, matching the schema/example shown in the Swagger documentation (Image 1).
  • Actual: The API response omits these child collections (they are empty), even though they are associated and visible in the database and UI (Images 2 & 3).

Request:

Could you please advise why the child collections are not being included in the returned DTO, and what needs to be adjusted in the generated code or mapping for them to be populated as expected? Is there an additional configuration required, or is this a known issue with the generated code?

I can provide further information if needed, including full code or additional screenshots.

Thank you for your assistance!

Best regards,

Hi Engincan,

Thank you for your response.

Let’s keep this ticket open for a few more days while I review the point and run some test scenarios based on your suggestions.

Best regards,

Hi Engincan,

Thank you for your last advice and explanation.

Considering I’m developing a multi-tenant modular monolith application using ABP.io (Blazor Server + EF Core) having the entities and initial CRUD created by ABP Suite, organized into three modules and several entities. My project needs to manage file uploads for multiple entities across these modules, supporting multiple tenants.

From my research and reviewing ABP.io’s default implementation as you mentioned in this support Ticket, I’ve noticed that when a File property is added to an entity, the framework generates a separate file container for each entity, defaulting to the database provider. For my application, this results in many containers and duplicated file management logic within each entity’s AppService.

Instead, I’d like to use Azure BlobStore as the provider, centralizing all file uploads for all tenants into a single container. My plan is to organize files using subdirectories in the following structure: Tenant/Module/Entity/Property This would ensure tenant isolation, logical organization, and easier management—while also keeping things DRY and maintainable.

As I believe the Architeture proposed by ABP represents a good choice to follow, I would appreciate your advice on these points:

1) Recommended Approach in ABP Framework: What is the best practice in ABP to use a single Azure Blob Storage container for all file properties, with subdirectory separation by tenant, module, entity, and property?

2) Centralized Configuration: How can I centralize the file container configuration so that all file uploads (across tenants, modules, and entities) are consistent, easy to maintain, and avoid duplication?

3) Overriding ABP Suite’s Scaffolding: Is there a supported way to override or customize ABP Suite’s default file management scaffolding to generate this centralized logic? If not, what’s the best way to approach it?

4) Manual Implementation and Best Practices: If this structure needs to be implemented manually, what is the recommended way to organize the code/services to keep things DRY, robust, and extensible for future needs?

The documentation is unprecise on these points—especially regarding on centralization of Azure BlobStore configuration and multi modules scenarios. Any code samples, design suggestions, or documentation references would be greatly appreciated.

Thank you very much for your help!

Hi Engincan,

Thank you for your response.

Let’s keep this ticket open for a few more days while I review the point and run some test scenarios based on your suggestions.

Best regards,

I've successfully implemented the configuration for Azure Blob Storage as described in the official documentation. However, my question is more focused on the architectural design required to make this integration scalable and efficient across all modules of my solution.

Specifically, I'm looking to understand:

  • What is the recommended architecture to fully integrate Azure Blob Storage with the file handling components generated by ABP Suite?
  • Where in the code generated by ABP Suite (especially in Razor Pages and related file components) should I replace or extend the default logic to redirect file uploads from local database storage to Azure Blob Storage?
  • Is it advisable to create a centralized service or abstraction layer to manage blob operations across modules? If so, what would be the best practice for implementing this in a modular and maintainable way?

The documentation provides a good starting point for configuring blob storage, but it doesn't clearly outline how to adapt the ABP Suite-generated file logic to use Azure Blob Storage as the primary storage backend.

I would greatly appreciate any guidance or examples that clarify the best approach to achieve this integration in a clean and scalable manner.

Thank you!

Check the docs before asking a question: https://abp.io/docs/latest Check the samples to see the basic tasks: https://abp.io/docs/latest/samples The exact solution to your question may have been answered before, and please first use the search on the homepage.

Provide us with the following info: 🧐 Hint: If you are using the ABP Studio, you can see all the information about your solution from the configuration window, which opens when you right-click on the solution and click on the Solution Configuration button.

Template: app Created ABP Studio Version: 0.9.25 Current ABP Studio Version: 1.0.1 ABP Suite: 9.2.0 ABP framework: 9.2.1 Tiered: Yes Multi-Tenancy: Yes UI Framework: blazor-server Theme: leptonx Theme Style: system Run Install Libs: Yes Database Provider: ef Database Management System: sqlserver Separate Tenant Schema: Yes Create Initial Migration: Yes Run Db Migrator: Yes Mobile Framework: maui Public Website: Yes Include Tests: Yes Kubernetes Configuration: No Distributed Event Bus: rabbitmq Use Local References: No Optional Modules: GDPR FileManagement TextTemplateManagement LanguageManagement AuditLogging Chat OpenIddictAdmin Selected Languages: English, English (United Kingdom), 简体中文, Español, العربية, हिन्दी, Português (Brasil), Français, Русский, Deutsch (Deuthschland), Türkçe, Italiano, Čeština, Magyar, Română (România), Svenska, Suomi, Slovenčina, Íslenska, 繁體中文

Default Language: English

Create Command: abp new NewApp -t app --tiered --ui-framework blazor-server --mobile maui --database-provider ef --database-management-system sqlserver --theme leptonx --separate-tenant-schema --public-website --without-cms-kit --dont-run-bundling -chat -file-management

Hello!

I am trying to implement the integration of the original File components and implementation generated by Abp Suite with my implementation of Azure Blob Storage and im facing some difficulties in the process.

As abp already implements with the File property type of abp suite, the file is been saved on a container pointing to the local database with its FileDescriptor within the function UploadFileAsync():

I've followed the documentation present in: https://abp.io/docs/latest/framework/infrastructure/blob-storing https://abp.io/docs/latest/framework/infrastructure/blob-storing/azure

However, the documentation does not clearly outline the best approach to replace the default local storage mechanism with Azure Blob Storage, especially while maintaining compatibility with the components generated by ABP Suite.

I would appreciate guidance on the recommended way to redirect file uploads to Azure Blob Storage instead of the local container, while ensuring that metadata and file descriptors continue to be handled correctly by the framework.

Thanks.

Showing 1 to 10 of 62 entries
Learn More, Pay Less
33% OFF
All Trainings!
Get Your Deal
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.2.0-preview. Updated on January 09, 2026, 07:22
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.