An abp module that provides standard tree structure entity implement.
-
Install the following NuGet packages. (see how)
- 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)
-
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 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) });
-
1.Check the module DependsOn(typeof(AbpTreesXxxModule))
dependencies are config
XxxEntityFrameworkCoreModule
, XxxDomainSharedModule
, XxxDomainModule
2.Check IYourRepository : ITreeRepository<YourEntity>
3.Be sure YourEntity:XxxEntity<Guid>,ITree<YourEntity>
4.Be sure XxxEntityFrameworkCoreModule
has config options.AddDefaultTreeRepositories();
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)
{
}
}
- Widget of tree operation for MVC UI.
- Create a TreeManager to provides more function,example:
Sort
(reassigned code),Ui Pagination
... - More Unit tests.