abp(net core)+easyui+efcore仓储系统——定义仓储并实现 (四)
abp(net core)+easyui+efcore实现仓储管理系统目录
abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)
abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二)
abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三)
在上一篇文章中我们创建了Module实体并在数据库中生成了数据表,在这一文章中我们介绍如何来对数据库进行操作。
一、先来介绍下仓储
仓储(Repository): 仓储用来操作数据库进行数据存取。仓储接口在领域层定义,而仓储的实现类应该写在基础设施层。
在ABP中,仓储类要实现IRepository接口,接口定义了常用的增删改查以及聚合方法,其中包括同步及异步方法。主要包括以下方法:

ABP针对不同的ORM框架对这个接口进行了默认的实现:
1) 对于EntityFrameworkCore,提供了EfCoreRepositoryBase<TDbContext, TEntity, TPrimaryKey>的泛型版本的实现方式。
2) 对于NHibernate,提供了NhRepositoryBase<TEntity, TPrimaryKey>的泛型版本的实现方式。
这些使用泛型的实现类,在大多数的时候,这些实现类中的方法已经足够应付一般增删改查的需要。如果默认实现类中的方法对于实体类来说已够用了,我们便不需要再去创建这个实体所需的仓储接口与实现类。直接通过在应用服务层定义仓储引用,然后通过构造函数注入即可。
接下来,我们来讲讲如何自定义仓储实现类。
二、如何实现自定义仓储
1.
在Visual Studio 2017的“解决方案资源管理器”中,右键单击在领域层“ABP.TPLMS.Core”项目。
选择“添加” > “新建文件夹”。
2.将文件夹命名为“IRepositories”。
3. 右键单击“IRepositories”文件夹,然后选择“添加” > “类”。
在弹出对话框“添加新项- ABP.TPLMS.Core”中选择接口,将接口命名为
IModuleRepository。然后使用鼠标左键单击“添加”按钮。如下图。

4. IModuleRepository接口的代码如下。
using Abp.Domain.Repositories;
using ABP.TPLMS.Entitys;
using System;
using System.Collections.Generic;
using System.Text; namespace ABP.TPLMS.IRepositories
{ interface IModuleRepository: IRepository<Module>
{ /// <summary>
/// 分页查询功能模块
/// </summary>
/// <param name="pageindex">页索引</param>
/// <param name="pagesize">每页多少条</param>
/// <returns>模块列表</returns>
IEnumerable<Module> LoadModules(int pageindex, int pagesize); /// <summary>
/// 批量删除
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
bool Delete(string ids);
} }
三、在基础架构层,实现该仓储。
1. 在Visual Studio 2017的“解决方案资源管理器”中,打开“ABP.TPLMS.EntityFrameworkCore”项目,找到“Repositories”目录,在这个目录中有一个ABP生成的基类。如下图。

2. 鼠标右键单击“Repositories”文件夹,然后选择“添加” > “类”。 在弹出对话框“添加新项- ABP.TPLMS.EntityFrameworkCore”中类命名为 ModuleRepository。然后使用鼠标左键单击“添加”按钮。代码如下。
using Abp.EntityFrameworkCore;
using ABP.TPLMS.Entitys;
using ABP.TPLMS.IRepositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text; namespace ABP.TPLMS.EntityFrameworkCore.Repositories
{ public class ModuleRepository:TPLMSRepositoryBase<Module>, IModuleRepository
{ public ModuleRepository(IDbContextProvider<TPLMSDbContext> dbContextProvider)
: base(dbContextProvider)
{
} public bool Delete(string ids)
{
var idList = ids.Split(',');
Expression<Func<Module, bool>> exp = m => idList.Contains(m.Id.ToString()); bool result = true;
Delete(exp);
return result; } public IEnumerable<Module> LoadModules(int pageindex, int pagesize)
{
return Context.Modules.OrderBy(u => u.Id).Skip((pageindex - ) * pagesize).Take(pagesize); }
}
}
该仓储实现,继承自模板生成的TPLMSRepositoryBase泛型抽象类,然后再实现IModuleRepository接口。这里要显示声明实现类的有参构造函数,使用泛型的IDbContextProvider将数据库上下文的子类ChargeStationContext传给父类的构造函数。如下图。

四、仓储的注意事项
- 仓储实现类方法中,ABP自动进行数据库连接的开启和关闭。
- 仓储方法被调用时,数据库连接自动开启事务。
- 当仓储方法调用另外一个仓储的方法,它们实际上共享的是同一个数据库连接和事务。
- 仓储对象都是暂时性的,因为IRepository接口默认继承自ITransientDependency接口。所以,仓储对象只有在需要注入的时候,才会由Ioc容器自动创建新实例。
- ABP默认的泛型仓储功能满足我们大部分的CURD操作需求。当有默认的仓储功能不满足需求的情况下,可以创建自己定制化的仓储实现类。
abp(net core)+easyui+efcore仓储系统——定义仓储并实现 (四)的更多相关文章
- abp(net core)+easyui+efcore仓储系统——解决方案介绍(二)
abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) ABP框架 首先介绍一下abp框架,abp其 ...
- abp(net core)+easyui+efcore仓储系统——领域层创建实体(三)
abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- abp(net core)+easyui+efcore仓储系统——展现层实现增删改查之控制器(六)
abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- abp(net core)+easyui+efcore仓储系统——创建应用服务(五)
abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- 2019年7月16日 abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十三)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十五)
core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- abp(net core)+easyui+efcore实现仓储管理系统——菜单 (十六)
系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
随机推荐
- LR杂记 - Linux的系统监控工具vmstat详细说明
一.前言 非常显然从名字中我们就能够知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,可是如何通过vmstat来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回想一下 ...
- Real-time storage area network
A cluster of computing systems is provided with guaranteed real-time access to data storage in a sto ...
- 常用编程软件站点、镜像站、科技类 PDF
0. 图书站点 Library Genesis 1. Python 包的下载 https://pypi.python.org/pypi/ 在域名的最后加上任何你想下载的第三方的包,比如 theano: ...
- android Notification分析——
您可能会遇到各种问题
使用的各种总结上线通知,csdn还有一个非常到位的总结,不这样做,反复总结,学生需要能够搜索自己或参考下面给出的链接. 研究开始时仔细阅读一些,今天,功能开发,一些问题和经验自己最近的遭遇给大家分享. ...
- Spring RestTemplate 专题
相同的参数(接口的入参json打印在日志了)在PostMan中返回预期的数据,但使用RestTemplate时去提示信息错误(参数中汉字).这种情况,搞得怀疑对RestTemplate的理解了使用Re ...
- 性能测试以及对redis
Ignite性能测试以及对redis的对比 测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测 ...
- 1.通过模板创建MAP版本项目
1.选择mpa+ef+module-zero 取名字 2.用vs打开项目后,在解决方案上右键 还原nuget包 3.打开程序包管理器控制台,选择以EntityFramework结尾的项目,并执行upd ...
- Opencv决策树分类器应用
机器学习在数据挖掘.计算机视觉.搜索引擎.医学诊断.证券市场分析.语言与手写识别等领域有着十分广泛的应用,特别是在数据分析挥着越来越重要的作用.在机器学习中,决策树是最基础且应用最广泛的归纳推理算法之 ...
- 使用bcc32做在windowXP上qt3.2.1编译环境的配置
1.安装borland C++编译器,编译器文件所在目录下的文件如下: 其中bcc32.cfg和ilink32.cfg文件是自己加进去的,bcc32.cfg内容是-I"C:\Borland\ ...
- #747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation)
原文:#747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation) 原文地址:https://wpf.2000th ...