- ABP Framework version: v3.0.3
- UI type: Angular
- Tiered (MVC) or Identity Server Seperated (Angular): yes
Hi Abp Team,
I am trying to extend Abp OrganizationUnit by introducing extra properties. I have looked at the documentation on how to do that by using ObjectExtensionManager.Instance.Modules(). However, what I am not able to figure out is adding a property which is a foreign key to another entity/table.
Say for example I have an entity called "OrganizationUnitCategory" which has a column called Id of type Guid. I need a property named UnitCategoryId to be added to Abp OrganizationUnit. Adding UnitCategoryId is strightforward but defining the navigation property of Type "OrganizationUnitCategory" is unclear for me.
You help is appreciated.
Thank you
4 Answer(s)
-
0
Hi,
There is an example to help you : https://github.com/abpframework/abp-samples/tree/master/DocumentationSamples/CustomApplicationModules.
-
0
I dont think this answers my questions unless I don't understand what is going on.
I will show you what I have done and you can direct me If I am on the right track.
I have created a UnitCategory class
I have added the extra properties to OrganizationUnit as documented in the docs.abp.io
and Defined the navigation properties
and that is what I get in migration
When I run the migrator project, this is what I get:
It breaks in SeedAsync method.
-
0
See https://github.com/abpframework/abp/issues/1414#issuecomment-508818941.
If you still want add navigation properties, please do this:
Entity:
public class UnitCategory : Entity<Guid> { public UnitCategory(Guid id) { Id = id; } public List<OrganizationUnit> OrganizationUnits { get; set; } }
DbContext:
protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); /* Configure the shared tables (with included modules) here */ builder.Entity<AppUser>(b => { b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser b.ConfigureByConvention(); b.ConfigureAbpUser(); /* Configure mappings for your additional properties * Also see the qaEfCoreEntityExtensionMappings class */ }); // add this.. builder.Entity<OrganizationUnit>(b => { b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "OrganizationUnits"); b.ConfigureByConvention(); b.Property(ou => ou.Code).IsRequired().HasMaxLength(OrganizationUnitConsts.MaxCodeLength) .HasColumnName(nameof(OrganizationUnit.Code)); b.Property(ou => ou.DisplayName).IsRequired().HasMaxLength(OrganizationUnitConsts.MaxDisplayNameLength) .HasColumnName(nameof(OrganizationUnit.DisplayName)); b.HasMany<OrganizationUnit>().WithOne().HasForeignKey(ou => ou.ParentId); b.HasMany(ou => ou.Roles).WithOne().HasForeignKey(our => our.OrganizationUnitId).IsRequired(); b.HasIndex(ou => ou.Code); }); builder.Ignore<OrganizationUnitRole>(); builder.Configureqa(); }
DbContextModelCreatingExtensions:
builder.Entity<UnitCategory>(b => { b.ToTable("UnitCategory"); b.HasMany(x => x.OrganizationUnits).WithOne().HasForeignKey("UnitCategoryId"); b.ConfigureByConvention(); });
EfCoreEntityExtensionMappings:
ObjectExtensionManager.Instance .MapEfCoreProperty<OrganizationUnit, Guid?>( "UnitCategoryId", b => b.HasMaxLength(64) );
-
0
Thnak you, Works like a charm.