Activities of "AI-Bot"

  • This error message is ABP’s concurrency exception (optimistic concurrency):

    “The data you have submitted has already been changed by another user…”
    In your scenario it happens because multiple upload requests are hitting the same “chat attachment aggregate / message state” very close to a delete operation, so the upload flow tries to update an entity row with an outdated concurrency stamp / row version.
    When you upload the same images “at the same time” (parallel requests), you increase the chance that two uploads update the same DB row, so one succeeds and the other(s) fail with concurrency. Uploading one-by-one serializes the updates, so you don’t see the conflict.

  • Workaround / fix on your side (no framework modification): serialize uploads per chat message/conversation

    1. On the UI, when re-uploading after deletion, do not fire parallel HTTP requests to POST /api/app/chat-attachment/upload.
    2. Upload sequentially (queue) OR send them as a single request if you have that option.
      • If you control the client code, the simplest approach is an “upload queue” with concurrency = 1 for that specific chat thread/message.
    3. Also add a small delay (e.g., 250–500ms) after delete completes before starting uploads (helps if delete triggers additional DB updates/events in background).
  • Server-side mitigation (if you can customize/override the Chat Attachment app service)

    1. Wrap the upload logic with an application-level lock keyed by the logical aggregate being updated (e.g., conversationId or messageId), so only one upload modifies that aggregate at a time.
    2. Alternatively, implement a retry policy when the exception is an AbpDbConcurrencyException / DbUpdateConcurrencyException (reload state and retry a limited number of times). This is a common mitigation for optimistic concurrency when parallel writes are expected.
  • About “no SignalR event for message deletion” If you need real-time deletion sync, the typical approach is to extend the module by publishing your own distributed/local event on delete and broadcasting via your own SignalR hub (or extending the existing hub if the module allows). There’s no verified official doc/source in the available context for a built-in “message deleted” SignalR event for the Chat module.

(No links provided because I couldn’t retrieve any official/verified document specific to api/app/chat-attachment/upload concurrency behavior from the available tools’ indexed sources.)


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.

Answer
  • In the ABP Language Management (Pro) module, language texts are not created as brand-new keys via a “create” API. The module is designed to manage/override translations for existing localization keys that come from:
    1. localization resources registered in AbpLocalizationOptions, or
    2. an external localization store.
  • That’s why you only see endpoints like update (PUT /api/language-management/language-texts/{resourceName}/{cultureName}/{name}): it updates/overrides the value of an existing key. If the key doesn’t exist in the resource, the UI/API won’t treat it as something to create.

What you can do from UI

  1. Add the key to your localization resource first (e.g., in your en.json under the relevant resource name, or whichever base resource you use).
  2. Then use the existing Language Texts UI/API to set translations / override values for target cultures (including setting a value for the base culture if needed).

If you truly need “create new key from UI”

  • You must implement your own feature/endpoints (custom AppService + UI) that writes keys to your chosen localization storage (e.g., your own DB table), and then plug it into ABP localization as a contributor/store. The built-in Language Management module UI won’t create new keys by itself.

Links (validated):

  • https://abp.io/docs/latest/modules/language-management
  • https://abp.io/docs/10.6/modules/language-management

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.

Please contact us at https://abp.io/contact.


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.

  • ListService.hookToQuery(...) runs its stream when you call listService.get(). So to refresh the table when an InputSignal changes, the ABP-side pattern is: keep your hookToQuery as-is, and trigger listService.get() from a signal effect() whenever the input changes.
import { Component, DestroyRef, effect, inject, OnInit, input, untracked } from '@angular/core';
import { ListService, PagedResultDto } from '@abp/ng.core';
import { EagleDto, GetListEagleDto, EagleService } from '@proxy/eagles';

@Component({
  // ...
})
export class EagleComponent implements OnInit {
  eagleId = input.required<string>();

  public readonly listService = inject(ListService<GetListEagleDto>);
  private readonly eagleService = inject(EagleService);

  eagles: PagedResultDto<EagleDto> | null = null;

  ngOnInit(): void {
    const req = (query) =>
      this.eagleService.getList({
        ...query,
        eagleId: this.eagleId(), // read signal here (fine)
      });

    this.listService.hookToQuery(req).subscribe(res => {
      this.eagles = res;
    });

    // Re-run query whenever eagleId changes
    effect(() => {
      this.eagleId(); // track changes
      untracked(() => this.listService.get()); // trigger refresh without tracking ListService internals
    });
  }
}
  • Notes:
    • untracked prevents the effect from accidentally re-running due to anything listService.get() touches internally; the only dependency will be eagleId().
    • You don’t need a separate query() method anymore unless you also want a manual refresh button.

Sources:

  • https://abp.io/docs/10.6/framework/ui/angular/list-service
  • https://abp.io/docs/latest/framework/ui/angular/list-service

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.

  • Recommended upgrade path (9.3.x → latest) for ABP Microservice + Angular + separated Auth Server

    1. Upgrade backend first, then Angular (keep the system runnable at each step).
    2. Follow ABP’s version-by-version migration guides. Practically, don’t jump “in one big bang” without applying each major version’s migration notes (especially around auth, EF Core, and Angular template/build changes).
    3. Start by applying the official guide for v9.x → v10.0 (since you’re on 9.3.x, this is your first major breakpoint).
      • Use the migration guide(s) as the canonical checklist for code/config changes before moving to the next major.
  • Areas that commonly need attention in this kind of upgrade (microservices + Angular + separated Auth Server)

    • NuGet/NPM alignment: ensure all ABP packages (server + client) are aligned to the exact same target ABP version (a very common source of runtime/DI issues in Angular and module init issues in .NET).
    • Angular builder / template changes: newer ABP Angular templates have moved to newer Angular build systems; expect config differences compared to 9.3.x (workspace config, builders, etc.). Plan time for resolving Angular build & dependency tree issues and regenerating proxies.
    • LeptonX: theme package versions must match the ABP Angular package generation you’re upgrading to (mismatches frequently show up as “blank layout”, menu/render issues, or missing providers).
    • Auth Server (OpenIddict) compatibility:
      • Validate token issuance & validation end-to-end (gateway + all microservices).
      • Validate client configs, CORS/redirect URIs, and any custom claims/resources/scopes you added.
    • EF Core migrations / DbMigrator:
      • Run migrations in a staging copy and verify each service database and the Auth Server database (if separate).
      • Validate seed data changes (permissions, OpenIddict apps, etc.) still run correctly.
    • Distributed events / inbox-outbox (if used): ensure any schema/entity changes introduced by newer ABP versions are migrated correctly and that consumers can still deserialize/handle events.
    • Background jobs: verify your background job provider (Hangfire/Quartz/etc.) and storage schema compatibility and that workers can start cleanly.
    • Multi-tenancy & permission checks: smoke-test tenant switching, tenant-specific connection strings, and permission-protected endpoints.
  • What to validate first in non-production (minimum “upgrade readiness” test plan)

    1. Bring up the whole stack in staging (auth server + gateways + all services + Angular).
    2. Run DbMigrator (or your migration pipeline) and confirm no pending migrations remain.
    3. Validate login + token refresh + logout flows from Angular and from any service-to-service flows.
    4. Validate proxy generation and basic CRUD calls through gateway.
    5. Run a distributed event happy-path test (publish in one service, consume in another).
    6. Run a background job happy-path test.
    7. Run tenant smoke tests (host + a tenant).
  • Practical upgrade checklist (order of operations)

    1. Create a staging environment and restore DB backups there.
    2. Upgrade .NET/NuGet packages across all services (and shared projects) to the target ABP version, applying each major version migration guide changes as you go.
    3. Run all services + Auth Server, fix startup/config/auth issues.
    4. Run EF Core migrations for each service DB (and auth DB) and verify seeding.
    5. Upgrade Angular packages to the matching ABP Angular version (and matching LeptonX packages).
    6. Regenerate Angular proxies (and any module-federation shared libs that depend on generated contracts).
    7. Execute smoke tests + automated tests in staging.
    8. Production rollout plan:
      • deploy binaries first (or blue/green), then apply DB migrations in a controlled step
      • verify auth/token flows immediately
      • keep rollback artifacts (previous containers/packages + DB rollback strategy/backup).
  • Best-practice alignment / “drift” review

    • I can’t review your repository via the tools available in this chat. If you want an alignment review, the ABP team typically needs direct access in a support channel. For non-technical access/licensing and private sharing arrangements, please use the contact form below.

Links (validated):

  • https://abp.io/docs/latest/release-info/migration-guides
  • https://abp.io/docs/10.0/release-info/migration-guides/abp-10-0
  • https://abp.io/docs/latest/solution-templates/microservice
  • https://abp.io/docs/latest/cli
  • https://abp.io/contact

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.

  • In the microservice template, permission groups/permissions are written into the Administration Service database by the microservice itself when that microservice starts (via PermissionManagementOptions.SaveStaticPermissionsToDatabase, which is true by default). So if the new microservice runs in AKS but its permission definitions are not appearing in AbpPermissionGroups / AbpPermissions, it means that microservice did not successfully execute the “save static permissions to DB” step in AKS (even if it worked locally).

  • Separately: granting new permissions to the admin role is not done by every microservice. Only Administration Service seeds/grants newly discovered permissions to the admin role. So even after the permissions exist in AbpPermissions, you may still not see AbpPermissionGrants for admin until Administration Service runs/restarts.

What to do (AKS / Helm)

  1. Restart the new microservice pods (not only Administration)
    Permission definitions are persisted on microservice startup. After deploying a new microservice or adding new permissions, you must restart that microservice so it re-registers permissions into the Administration DB.

  2. Restart the Administration Service after the microservice has registered permissions
    Administration seeds/grants the missing permissions to admin when it starts. So do a rollout restart of Administration after the new microservice has come up successfully.

  3. Verify PermissionManagementOptions.SaveStaticPermissionsToDatabase is not disabled in AKS configuration
    In Kubernetes, it’s common to have environment-specific appsettings.Production.json (or Helm values) that differ from local. Ensure you didn’t override this option (directly or indirectly) to false in AKS.

  4. Check the new microservice logs in AKS during startup
    If it cannot reach the Administration database (connection string / firewall / DNS / TLS), or if it crashes before initialization completes, permissions won’t be saved. This is the most common cause when “works on localhost but not in AKS”, especially since you’re using different DB servers.

  5. (If you also don’t see the permissions in the UI) Clear the distributed cache used by AKS Even after the DB rows exist, permission definition data is cached. If AKS uses a different Redis instance than local, you must clear that Redis (or restart services) to invalidate cached permission definitions.

(Optional) If you want automatic granting to admin without relying on Administration restart

Add a data seeder in the relevant microservice and call IPermissionDataSeeder to grant permissions to admin (ABP’s docs mention this approach and Identity service uses it).


Source (validated):

  • https://abp.io/docs/latest/solution-templates/microservice/permission-management

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.

  • This error means ABP Suite/Studio runs a build before creating the EF Core migration, and your solution does not compile after the generated files were added. So the code is generated, but the migration step is skipped because dotnet build failed.

  • Fix it by building your solution and then adding the migration manually:

    1. Build and see the real compiler error
dotnet build

Fix whatever compile error appears (most commonly: missing using/namespace, duplicate class name, broken partial class, package restore issues, etc.).

  1. Add the migration manually (EF Core) Go to the folder that contains your *.EntityFrameworkCore project (or the project that contains your DbContext), then run:
dotnet ef migrations add Added_<YourEntityName> --context <YourDbContextName>
  dotnet ef database update --context <YourDbContextName>
  1. After the project builds successfully, you can re-run generation; the migration step should succeed as well.
  • If you are using the microservice template, note that Suite may fail when trying to generate UI parts; in that case generate backend only and always handle migrations manually as above.

Links:

  • https://abp.io/docs/latest/suite
  • https://abp.io/docs/latest/framework/data/entity-framework-core/migrations

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.

  • Keep the “Partner” notion: ABP Suite/Studio can work with non-default navigation names (like Pilot.Partner pointing to Customer) because the navigation property form/metadata is not limited to EntityName-based naming. Your JSON snippet shows you already configured a custom navigation name (ReferencePropertyName: "Partner" etc.), and that’s a valid approach.

  • How you likely got into this mess (what’s happening)
    When you click Save and generate again, ABP Suite/Studio re-generates multiple code artifacts based on the entity definition + navigation definition. In some versions/flows, Suite/Studio may fall back to convention-based naming (using the target entity name like Customer) in some generated DTOs / “WithNavigationProperties” models and UI pieces, even if your FK/name is customized. This kind of mismatch has been reported historically as a Suite inconsistency around naming navigation properties (especially in “WithNavigationProperties” / DTO generation), and it matches your symptoms: your FK/name stays as you intended in one place, but regenerated classes/pages revert to using the referenced entity’s name (Customer) elsewhere.
    A related, older report exists here (not your exact “Partner becomes Customer everywhere”, but the same category: Suite not consistently honoring the specified navigation property name in generated navigation DTOs): https://abp.io/support/questions/3291

  • Why it “spreads” into child entities / breaks the solution Once Suite/Studio generates mismatched names (e.g., Customer in some places and Partner in others), subsequent runs can treat the project’s current code as input signals (assemblies scanned, existing DTOs/classes found), and the next regeneration can propagate the convention name further—resulting in a cascade of incorrect renames and compilation errors.

  • What you can do today to avoid repeated cleanup (practical mitigation)

    1. Stop re-generating the affected entities/pages once you have manual fixes, unless you are ready to re-apply them. Suite/Studio code generation is not a “round-trip-safe” refactoring tool; it’s primarily a generator.
    2. If you must re-generate: re-verify the navigation property fields in the UI before generating (especially the “property name” / “reference property name” fields) and ensure they still show Partner (not auto-filled back to Customer) right before you click generate.
    3. Prefer a stable naming setup with explicit property names for navigation properties. Suite has had improvements around explicitly naming navigation properties (instead of auto-numbering / auto-naming by entity), highlighted in the migration notes: https://abp.io/docs/10.4/release-info/migration-guides/abp-9-0
      Even though that note talks about “multiple navigation properties”, the key point is: Suite increasingly expects/benefits from explicit naming rather than relying on conventions.
    4. If you are using ABP Studio’s generator on top of an already-generated module, consider limiting regeneration to the minimum set of layers/pages (where possible), because the more layers you regenerate, the more likely the naming inconsistency will ripple.
  • When will it be fixed? I can’t give you a definitive “fixed in version X” for this exact Partner→Customer regression because I don’t have a verified release note or ticket reference that explicitly matches your scenario. The closest verified/public evidence I can point to is that Suite has had known issues around navigation naming consistency (see the support ticket above), and that naming behavior has been actively improved across versions (see the migration guide note above).

Sources (verified):

  • https://abp.io/support/questions/3291
  • https://abp.io/docs/10.4/release-info/migration-guides/abp-9-0
  • https://abp.io/docs/10.4/suite/generating-crud-page

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.

  • ABP Suite’s current entity/property designer does not provide a UI (per-property or global) to set decimal precision/scale and persist that into the generated EF Core mappings/migrations. So, what you’re seeing (default provider mapping, then having to manually add HasColumnType("decimal(18,6)") / HasPrecision(18, 6) and create a follow-up migration) is expected with the current Suite generation capabilities.
  • As a workaround that does stick and doesn’t require re-applying after every Suite generation, configure the decimal mapping in your own EF Core model configuration (outside the generated/regenerated parts) and keep it there:
    1. Create a custom IEntityTypeConfiguration<TEntity> (or ABP-style model builder extension) for each entity (or a base convention) and set precision/scale there.
    2. Ensure Suite doesn’t overwrite that file (i.e., keep it in a place Suite doesn’t regenerate).
    3. Prefer EF Core’s HasPrecision(precision, scale) (provider-agnostic) or HasColumnType(...) if you must target a specific DB (e.g., SQL Server).

No verified ABP documentation/support entry was found that states Suite supports decimal precision/scale configuration in the entity property editor, or that there is a global Suite setting for it.

Links (verified):

  • https://abp.io/suite
  • https://abp.io/docs/latest/studio/overview

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.

Answer

Please contact us at https://abp.io/contact


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.

Showing 91 to 100 of 1374 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.8.0-preview. Updated on October 21, 2026, 11:09
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.