Activities of "maliming"

hi

Can you share the solution?

Thanks.

hi

Please try to override the PublishEventsForChangedEntityOnSaveChangeAsync and PublishEventsForTrackedEntity methods and test again.

Thanks.

[ReplaceDbContext(typeof(IIdentityProDbContext))]
[ConnectionStringName("Default")]
public class AbpShowcaseDbContext :
    AbpDbContext<AbpShowcaseDbContext>,
    IIdentityProDbContext
{

    public AbpShowcaseDbContext(DbContextOptions<AbpShowcaseDbContext> options)
        : base(options)
    {

    }

    protected override Task PublishEventsForChangedEntityOnSaveChangeAsync()
    {
        foreach (var entityEntry in AbpEfCoreNavigationHelper.GetChangedEntityEntries())
        {
            if (EntityChangeOptions.Value.PublishEntityUpdatedEventWhenNavigationChanges)
            {
                var ignoredEntity = EntityChangeOptions.Value.IgnoredNavigationEntitySelectors.Any(selector => selector.Predicate(entityEntry.Entity.GetType()));
                var onlyForeignKeyModifiedEntity = entityEntry.State == EntityState.Modified && entityEntry.Properties.Where(x => x.IsModified).All(x => x.Metadata.IsForeignKey());

                if ((entityEntry.State == EntityState.Unchanged && ignoredEntity) || ignoredEntity)
                {
                    continue;
                }

                if (EntityChangeOptions.Value.UpdateAggregateRootWhenNavigationChanges &&
                    EntityChangeOptions.Value.IgnoredUpdateAggregateRootSelectors.All(selector => !selector.Predicate(entityEntry.Entity.GetType())) &&
                    entityEntry.State == EntityState.Unchanged)
                {
                    ApplyAbpConceptsForModifiedEntity(entityEntry, true);
                }

                if (entityEntry.Entity is ISoftDelete && entityEntry.Entity.As<ISoftDelete>().IsDeleted)
                {
                    EntityChangeEventHelper.PublishEntityDeletedEvent(entityEntry.Entity);
                }
                else
                {
                    EntityChangeEventHelper.PublishEntityUpdatedEvent(entityEntry.Entity);
                }
            }
            else if (entityEntry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd)))
            {
                if (entityEntry.Properties.Where(x => x.IsModified).All(x => x.Metadata.IsForeignKey()))
                {
                    // Skip `PublishEntityDeletedEvent/PublishEntityUpdatedEvent` if only foreign keys have changed.
                    break;
                }

                if (entityEntry.Entity is ISoftDelete && entityEntry.Entity.As<ISoftDelete>().IsDeleted)
                {
                    EntityChangeEventHelper.PublishEntityDeletedEvent(entityEntry.Entity);
                }
                else
                {
                    EntityChangeEventHelper.PublishEntityUpdatedEvent(entityEntry.Entity);
                }
            }
        }

        return Task.CompletedTask;
    }

    protected override void PublishEventsForTrackedEntity(EntityEntry entry)
    {
        switch (entry.State)
        {
            case EntityState.Added:
                ApplyAbpConceptsForAddedEntity(entry);
                EntityChangeEventHelper.PublishEntityCreatedEvent(entry.Entity);
                break;

            case EntityState.Modified:
                if (entry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd)))
                {
                    // if (entry.Properties.Where(x => x.IsModified).All(x => x.Metadata.IsForeignKey()))
                    // {
                    //     // Skip `PublishEntityDeletedEvent/PublishEntityUpdatedEvent` if only foreign keys have changed.
                    //     break;
                    // }

                    ApplyAbpConceptsForModifiedEntity(entry);
                    if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
                    {
                        EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity);
                    }
                    else
                    {
                        EntityChangeEventHelper.PublishEntityUpdatedEvent(entry.Entity);
                    }
                }
                else if (EntityChangeOptions.Value.PublishEntityUpdatedEventWhenNavigationChanges &&
                         EntityChangeOptions.Value.IgnoredNavigationEntitySelectors.All(selector => !selector.Predicate(entry.Entity.GetType())) &&
                         AbpEfCoreNavigationHelper.IsNavigationEntryModified(entry))
                {
                    if (EntityChangeOptions.Value.UpdateAggregateRootWhenNavigationChanges &&
                        EntityChangeOptions.Value.IgnoredUpdateAggregateRootSelectors.All(selector => !selector.Predicate(entry.Entity.GetType())))
                    {
                        ApplyAbpConceptsForModifiedEntity(entry, true);
                    }

                    if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
                    {
                        EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity);
                    }
                    else
                    {
                        EntityChangeEventHelper.PublishEntityUpdatedEvent(entry.Entity);
                    }
                }
                break;

            case EntityState.Deleted:
                ApplyAbpConceptsForDeletedEntity(entry);
                EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity);
                break;
        }
    }

hi

I will check it again.

Thanks.

hi

The relationship of Genres and Movies is Many-to-Many instead of One-To-Many

https://github.com/abpframework/abp/pull/24094

Great

hi

We will check and fix it.

Thanks.

hi

You can override the GetBlobContainerClient of AzureBlobProvider class to implement your logic.

Volo.Abp.BlobStoring.Azure is fully open-source. You can change it at all.

https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs#L78-L83

Thanks.

hi

I have downloaded the AbpShowcase project. Can you share the steps?

Thanks.

hi

It works after adding a Redis server to the appsettings.json file.

hi

We've created a new simple ABP project to reproduce, and the same behaviour happens.

Can you share the test project to liming.ma@volosoft.com?

Thanks.

Showing 491 to 500 of 11565 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.1.0-preview. Updated on December 25, 2025, 06:16
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.