# 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 nodeCodeand CalcLevelproperty when insertUpdateAsync:Auto Move node when update aEntitythat parentId is modifiedDeleteAsync:Also deleteChildrennodes
You have two ways to use this
RepositoryWay 1 : Default Repository(
ITreeRepository<>),
Addcontext.Services.AddTreeRepository<MyProjectNameDbContext>();to ConfigureServices method inMyProjectNameEntityFrameworkCoreModule.cs.Way 2 : Create a
CustomRepositorythat 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.