ABP学习入门系列(三) (领域层中的仓储Reposit…
2018-06-22 06:17:02来源:未知 阅读 ()
一,仓储定义:“在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象”
(Martin Fowler) 。
仓储用来操作数据库进行数据存取。仓储接口在领域层定义,而仓储的实现类应该写在基础设施层
public UserAppService( IRepository<User, long> repository, UserManager userManager, IRepository<Role> roleRepository, RoleManager roleManager) : base(repository) { _userManager = userManager; _roleRepository = roleRepository; _roleManager = roleManager; }
以上为application层的一个service ,在ABP中,仓储类要实现IRepository
接口,
大部分情况下这些方法已足已应付一般实体的需要。如果这些方法对于实体来说已足够,我们便不需要再去创建这个实体所需的仓储接口/类。因此我们绝大多数情况下可以想上面的userappservice一样的实现IRepository,来满足数据存取的需求。
二,假设 IRepository没有我们特需的方法。自定义仓储
1,在领域层(core下),创建IRepositories文件夹,然后定义IBackendTaskRepository类。
using Abp.Domain.Repositories; using System.Collections.Generic; using Task = LearningMpaAbp.Tasks.Task; namespace LearningMpaAbp.IRepositories { /// <summary> /// 自定义仓储示例 /// </summary> public interface IBackendTaskRepository : IRepository<Task> { /// <summary> /// 获取某个用户分配了哪些任务 /// </summary> /// <param name="personId">用户Id</param> /// <returns>任务列表</returns> List<Task> GetTaskByAssignedPersonId(long personId); } }
2,在基础架构层(EntityFramework项目下的EntityFramework下的Repository下添加BackendTaskRepository类
),实现该仓储。
using Abp.EntityFramework; using LearningMpaAbp.IRepositories; using System.Collections.Generic; using System.Linq; using Task = LearningMpaAbp.Tasks.Task; namespace LearningMpaAbp.EntityFramework.Repositories { public class BackendTaskRepository : LearningMpaAbpRepositoryBase<Task>, IBackendTaskRepository { public BackendTaskRepository(IDbContextProvider<LearningMpaAbpDbContext> dbContextProvider) : base(dbContextProvider) { } /// <summary> /// 获取某个用户分配了哪些任务 /// </summary> /// <param name="personId">用户Id</param> /// <returns>任务列表</returns> public List<Task> GetTaskByAssignedPersonId(long personId) { var query = GetAll(); if (personId > 0) { query = query.Where(t => t.AssignedPersonId == personId); } return query.ToList(); } } }
LearningMpaAbpRepositoryBase
泛型抽象类,然后再实现IBackendTaskRepository
接口。这里要显示声明实现类的有参构造函数,使用泛型的IDbContextProvider将数据库上下文的子类ChargeStationContext传给父类的构造函数。- 数据库连接的开启和关闭, 在仓储方法中,ABP 会自动化的进行连接管理
- 当仓储方法被调用后,数据库连接会自动开启且启动事务 。
- 当仓储方法调用另外一个仓储的方法,它们实际上共享的是同一个数据库连接和事务。
- 仓储对象都是暂时性的,因为IRepository接口默认继承自ITransientDependency接口。所以,仓储对象只有在需要注入的时候,才会由Ioc容器自动创建新实例。
- 默认的泛型仓储能满足我们大部分的需求。只有在不满足的情况下,才创建定制化的仓储。
以上。。。
参考:http://www.jianshu.com/p/6e90a94aeba4
代码:https://github.com/tianxiangd/LearnAbp
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net定点执行任务的方法 2020-03-18
- 用继承方法实现页面判断session的方法 2020-03-10
- 详解ABP框架中Session功能的使用方法 2020-01-18
- 详解ABP框架中的数据过滤器与数据传输对象的使用 2020-01-18
- asp.net基础学习之前端页面布局 2019-11-30
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash