An abp module that provides standard tree structure entity implement.
-
Install with AbpHelper
Coming soon.
-
Install Manually
-
Install
EasyAbp.Abp.Trees.Domain
NuGet package toMyProject.Domain
project and add[DependsOn(AbpTreesDomainModule)]
attribute to the module. -
Install
EasyAbp.Abp.Trees.Domain.Shared
NuGet package toMyProject.Domain.Shared
project and add[DependsOn(AbpTreesDomainSharedModule)]
attribute to the module. -
Install
EasyAbp.Abp.Trees.EntityFrameworkCore
NuGet package toMyProject.EntityFrameworkCore
project and add[DependsOn(AbpTreesEntityFrameworkCoreModule)]
attribute to the module.
-
-
Create a entity and implement
ITree<TEntity>
. -
Repository:
EfCoreTreeRepository<TDbContext, TEntity>
override some function ofEfCoreRepository<TDbContext, TEntity, TKey>
to match tree structure:
-
InsertAsync
:Auto Append nodeCode
and CalcLevel
property when insert -
UpdateAsync
:Auto Move node when update aEntity
that parentId is modified -
DeleteAsync
:Also deleteChildren
nodes
You have two ways to use this Repository
-
Way 1 : Default Repository(
ITreeRepository<>
),
Addcontext.Services.AddTreeRepository<MyProjectNameDbContext>();
to ConfigureServices method inMyProjectNameEntityFrameworkCoreModule.cs
. -
Way 2 : Create a
CustomRepository
that base onEfCoreTreeRepository<TDbContext, TEntity>
-
Example:
context.Services.AddAbpDbContext<TestDbContext>(options =>
{
options.AddDefaultRepositories(includeAllEntities: true);//add Abp's `IRepository<TEntity>`
options.AddDefaultTreeRepositories();//add `ITreeRepository<TEntity>` for all Entity with implement `ITree<TEntity>`
options.TreeEntity<Resource>(x => x.CodeLength = 10);//set CodeLength for each Entity(Default:5)
});
It works fine with Volo.Abp.Application.Services.CrudAppService
.
Just like strategy pattern
to Replace IRepository<>
with ITreeRepository<Domain.OrganizationUnit>
,
It will handle tree structure of entity when Create,Update,Delete
public class OrganizationUnitAppService:
Volo.Abp.Application.Services.CrudAppService<
Domain.OrganizationUnit, Application.OrganizationUnitDto,
Application.OrganizationUnitDto,Guid, Volo.Abp.Application.Dtos.IPagedAndSortedResultRequest,
Application.CreateOrganizationUnitDto,Application.UpdateOrganizationUnitDto>,
IOrganizationUnitAppService
{
public OrganizationUnitAppService(
EasyAbp.Abp.Trees.ITreeRepository<Domain.OrganizationUnit> organizationUnitRepository
):base(organizationUnitRepository)
{
}
}
- Widget of tree operation for MVC UI.
- Create a TreeManager to provides more function,example:
Sort
(reassigned code),Ui Pagination
... - More Unit tests.