一,class="fontstyle0">仓储定义:“在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象”
(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传给父类的构造函数。
三,关于仓储的一些知识
以上。。。
参考http://www.jianshu.com/p/6e90a94aeba4