个人博客网站设计模板wordpress 社交链接
个人博客网站设计模板,wordpress 社交链接,长沙 网站seo服务 网络服务,工业设计服务一、先来介绍下仓储
仓储#xff08;Repository#xff09;#xff1a; 仓储用来操作数据库进行数据存取。仓储接口在领域层定义#xff0c;而仓储的实现类应该写在基础设施层。
在ABP中#xff0c;仓储类要实现IRepository接口#xff0c;接口定义了常用的增删改查以及…一、先来介绍下仓储
仓储Repository 仓储用来操作数据库进行数据存取。仓储接口在领域层定义而仓储的实现类应该写在基础设施层。
在ABP中仓储类要实现IRepository接口接口定义了常用的增删改查以及聚合方法其中包括同步及异步方法。主要包括以下方法 IRepository接口定义的方法
ABP针对不同的ORM框架对该接口给予了默认的实现 针对EntityFramework提供了EfRepositoryBaseTDbContext, TEntity, TPrimaryKey的泛型版本的实现方式。 针对NHibernate提供了NhRepositoryBaseTEntity, TPrimaryKey的泛型版本的实现方式。
泛型版本的实现就意味着大多数的时候这些方法已足已应付一般实体的需要。如果这些方法对于实体来说已足够我们便不需要再去创建这个实体所需的仓储接口/类。
直接通过在应用服务层定义仓储引用然后通过构造函数注入即可。在我们的应用服务层即可按以下方式使用Task仓储 public class TaskAppService : ITaskAppService {
private readonly IRepositoryTask _taskRepository;
public TaskAppService(IRepositoryTask taskRepository)
{ _taskRepository taskRepository;
}示例代码中使用的就是这种方式。
二、如何实现自定义仓储
假设我们需要查找某个用户都分配哪些任务。
在领域层创建IRepositories文件夹然后定义IBackendTaskRepository。namespace LearningMpaAbp.IRepositories
{/// summary/// 自定义仓储示例/// /summarypublic interface IBackendTaskRepository : IRepositoryTask{/// summary/// 获取某个用户分配了哪些任务/// /summary/// param namepersonId用户Id/param/// returns任务列表/returnsListTask GetTaskByAssignedPersonId(long personId);}
}在基础架构层实现该仓储。namespace LearningMpaAbp.EntityFramework.Repositories
{public class BackendTaskRepository:LearningMpaAbpRepositoryBaseTask,IBackendTaskRepository{public BackendTaskRepository(IDbContextProviderLearningMpaAbpDbContext dbContextProvider) : base(dbContextProvider){}/// summary/// 获取某个用户分配了哪些任务/// /summary/// param namepersonId用户Id/param/// returns任务列表/returnspublic ListTask GetTaskByAssignedPersonId(long personId){var query GetAll();if (personId0){query query.Where(t t.AssignedPersonId personId);}return query.ToList();}}
}该仓储实现继承自模板生成的LearningMpaAbpRepositoryBase泛型抽象类然后再实现IBackendTaskRepository接口。这里要显示声明实现类的有参构造函数使用泛型的IDbContextProvider将数据库上下文的子类ChargeStationContext传给父类的构造函数。 自定义仓储的代码路径
三、仓储的注意事项
仓储方法中ABP自动进行数据库连接的开启和关闭。仓储方法被调用时数据库连接自动开启且启动事务。当仓储方法调用另外一个仓储的方法它们实际上共享的是同一个数据库连接和事务。仓储对象都是暂时性的因为IRepository接口默认继承自ITransientDependency接口。所以仓储对象只有在需要注入的时候才会由Ioc容器自动创建新实例。默认的泛型仓储能满足我们大部分的需求。只有在不满足的情况下才创建定制化的仓储。源码已上传至Github-LearningMpaAbp可自行参考。 作者圣杰 链接https://www.jianshu.com/p/6e90a94aeba4 来源简书 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90081.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!