Open Closed

Issues while Extending AppUser Entity (One to Many) #452


User avatar
0
falsharif created

Hi team, First of all thanks alot of the amazing work with the ABP Commercial.

I am currently having an issue that seems obvious but i might be doing something wrong, would really appreciate your help as i am stuck.

So when i am trying to run my initial Db migration, i am getting this error :

System.InvalidOperationException: 'The property 'AppUser.ExtraProperties' could not be mapped, because it is of type 'Dictionary<string, object>' which is not a supported primitive type or a valid entity type. Either explicitly map this property, or ignore it using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.'

I followed the guide to extend AppUser Entity :

My AppUser Entity :

namespace Dukkantek.Users {

public class AppUser : FullAuditedAggregateRoot&lt;Guid&gt;, IUser
{
    #region Base properties

    /* These properties are shared with the IdentityUser entity of the Identity module.
     * Do not change these properties through this class. Instead, use Identity module
     * services (like IdentityUserManager) to change them.
     * So, this properties are designed as read only!
     */

    public virtual Guid? TenantId { get; private set; }

    public virtual string UserName { get; private set; }

    public virtual string Name { get; private set; }

    public virtual string Surname { get; private set; }

    public virtual string Email { get; private set; }

    public virtual bool EmailConfirmed { get; private set; }

    public virtual string PhoneNumber { get; private set; }

    public virtual bool PhoneNumberConfirmed { get; private set; }

    #endregion

    

    /* Add your own properties here. Example:
     *
     * public virtual string MyProperty { get; set; }
     * public string MyProperty { get; set; }
     *
     * If you add a property and using the EF Core, remember these;
     *
     * 1. update DukkantekDbContext.OnModelCreating
     * to configure the mapping for your new property
     * 2. Update DukkantekEfCoreEntityExtensionMappings to extend the IdentityUser entity
     * and add your new property to the migration.
     * 3. Use the Add-Migration to add a new database migration.
     * 4. Run the .DbMigrator project (or use the Update-Database command) to apply
     * schema change to the database.
     */


    
    public virtual ICollection&lt;Customer&gt; Customers { get; set; }
    private AppUser()
    {
        
    }
}

Now my AppUser has a one to many relationship with Customer -- > ** public virtual ICollection<Customer> Customers { get; set; } **

** and in my Customer Class:**

public class Customer : AuditedAggregateRoot&lt;Guid&gt;, ISoftDelete
{
 
    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    [StringLength(15)]
    public string Phone { get; set; }

 public Guid UserId { get; set; }
 public virtual AppUser User { get; set; }






My DbContexts OnModelCreating  :  

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

        /* Configure the shared tables (with included modules) here */

        builder.Entity&lt;AppUser&gt;(b =>
        {
            b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser
            b.HasMany(p => p.Customers).WithOne().HasForeignKey(r => r.UserId);
         
            b.ConfigureExtraProperties();
            b.ConfigureByConvention();
            b.ConfigureAbpUser();
          
            /* Configure mappings for your additional properties.
             * Also see the DukkantekEfCoreEntityExtensionMappings class.
             */
        });
        
        

** DukkantekDbContextModelCreatingExtensions**

        builder.Entity&lt;Customer&gt;(b =>
        {
            b.ToTable(DukkantekConsts.DbTablePrefix + "Customers", DukkantekConsts.DbSchema);
            b.ConfigureByConvention(); //auto configure for the base class props

        });
        
        

** DukkantekEfCoreEntityExtensionMappings** public static void Configure() { DukkantekGlobalFeatureConfigurator.Configure(); DukkantekModuleExtensionConfigurator.Configure();

        OneTimeRunner.Run(() =>
        {
          
             * See the documentation for more:
             * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities
             */
       
            ObjectExtensionManager.Instance.MapEfCoreProperty&lt;IdentityUser, ICollection&lt;Customer&gt;>("Customers");
         
         
        });
    }

I feel like this line is probably the issue : ObjectExtensionManager.Instance.MapEfCoreProperty<IdentityUser, ICollection<Customer>>("Customers");

so how do i map IdentityUser to an ICollection of Customers ?? would really appreciate your support on this


1 Answer(s)
  • User Avatar
    0
    liangshiwei created
    Support Team Fullstack Developer

    May https://github.com/abpframework/abp-samples/tree/master/DocumentationSamples/CustomApplicationModules can help you.

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.0.0-preview. Updated on July 11, 2025, 11:35