Skip to content

EasyAbp/Abp.Trees

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.

Abp.Trees

ABP version NuGet NuGet Download Discord online GitHub stars

An abp module that provides standard tree structure entity implement.

Installation

  1. Install the following NuGet packages. (see how)

    • EasyAbp.Abp.Trees.Domain
    • EasyAbp.Abp.Trees.Domain.Shared
    • EasyAbp.Abp.Trees.EntityFrameworkCore
  2. Add DependsOn(typeof(AbpTreesXxxModule)) attribute to configure the module dependencies. (see how)

Usage

  1. Create a entity and implement ITree<TEntity>.

  2. Create a Repository for the entity. EfCoreTreeRepository<TDbContext, TEntity> override some function of EfCoreRepository<TDbContext, TEntity, TKey> to match tree structure:

    • InsertAsync :Auto Append node Code and Calc Level property when insert

    • UpdateAsync :Auto Move node when update a Entity that parentId is modified

    • DeleteAsync :Also delete Children nodes

  3. You have two ways to use this Repository

    • Way 1 : Default Repository(ITreeRepository<>),
      Add context.Services.AddTreeRepository<MyProjectNameDbContext>(); to ConfigureServices method in MyProjectNameEntityFrameworkCoreModule.cs.

    • Way 2 : Create a CustomRepository that base on EfCoreTreeRepository<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.

About

An abp module that provides standard tree structure entity implement.

Resources

License

Stars

Watchers

Forks