# Abp.Trees
(opens new window) (opens new window) (opens new window) (opens new window) (opens new window)
An abp module that provides standard tree structure entity implement.
# Installation
Install the following NuGet packages. (see how (opens new window))
- EasyAbp.Abp.Trees.Domain
- EasyAbp.Abp.Trees.Domain.Shared
- EasyAbp.Abp.Trees.EntityFrameworkCore
Add
DependsOn(typeof(AbpTreesXxxModule))
attribute to configure the module dependencies. (see how (opens new window))
# Usage
Create a entity and implement
ITree<TEntity>
.Create a Repository for the entity.
EfCoreTreeRepository<TDbContext, TEntity>
override some function ofEfCoreRepository<TDbContext, TEntity, TKey>
to match tree structure:InsertAsync
:Auto Append nodeCode
and CalcLevel
property when insertUpdateAsync
:Auto Move node when update aEntity
that parentId is modifiedDeleteAsync
: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) });
# Sample
It works fine with Volo.Abp.Application.Services.CrudAppService
.
After replacing IRepository<>
with ITreeRepository<Domain.OrganizationUnit>
, the repository will handle the tree structure of the entity during creating, updating, and deleting.
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)
{
}
}
# Roadmap
- [ ] Widget of tree operation for MVC UI.
- [ ] Create a TreeManager to provides more function,example:
Sort
(reassigned code),Ui Pagination
... - [ ] More Unit tests.