## 简介 > 想做一个快乐的Crud boy??好,满足你 可能绝大部分简单的业务,真的只是不用类型的Crud,大量的重复代码,使用cv方式,不够优雅 框架内部封装各种场景下的crud ## 使用 在应用层继承`YiCrudAppService`crud服务即可 在这之前,你应该先了解各个dto的作用: > 注意,我们当然可以直接使用Abp中的`CrudAppService`,但由于Abp内置的Crud还缺少一些常用的接口,比如批量删除等方式,所以推荐使用`YiCrudAppService`,使用上完全没有区别 ``` cs - TGetOutputDto (单查返回的dto) - TGetListOutputDto (多查返回的dto) - TGetListInput (多查的条件) - TCreateInput (创建的dto) - TUpdateInput (更新的dto) ``` 根据Dto业务场景,它有很多种选项,依次为: ``` cs - YiCrudAppService - YiCrudAppService - YiCrudAppService - YiCrudAppService - YiCrudAppService ``` dto可以放到`Application.Contracts`层,同理接口继承`IYiCrudAppService`即可 ```cs - YiCrudAppService - YiCrudAppService - YiCrudAppService - YiCrudAppService - YiCrudAppService ``` > 可以发现,接口,不应该与实体有直接关系 其中,在YiCrudAppService中,我们提供了一些内置的方法: ```cs public virtual async Task CreateAsync(TCreateInput input) public virtual async Task DeleteAsync(string id) public virtual async Task UpdateAsync(TKey id, TUpdateInput input) public virtual async Task GetAsync(TKey id) public virtual async Task> GetListAsync(TGetListInput input) ``` 同时还有映射关系: ``` cs protected virtual Task MapToGetOutputDtoAsync(TEntity entity) protected virtual Task> MapToGetListOutputDtosAsync(List entities) protected virtual Task MapToGetListOutputDtoAsync(TEntity entity) protected virtual Task MapToGetOutputDtoAsync(TEntity entity) protected virtual Task> MapToGetListOutputDtosAsync(List entities) protected virtual Task MapToGetListOutputDtoAsync(TEntity entity) ``` 另外,它也提供了对应的`仓储`及`当前用户`等常用属性