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传给父类的构造函数。如下图。

四、仓储的注意事项

  1. 仓储实现类方法中,ABP自动进行数据库连接的开启和关闭。
  2. 仓储方法被调用时,数据库连接自动开启事务。
  3. 当仓储方法调用另外一个仓储的方法,它们实际上共享的是同一个数据库连接和事务。
  4. 仓储对象都是暂时性的,因为IRepository接口默认继承自ITransientDependency接口。所以,仓储对象只有在需要注入的时候,才会由Ioc容器自动创建新实例。
  5. ABP默认的泛型仓储功能满足我们大部分的CURD操作需求。当有默认的仓储功能不满足需求的情况下,可以创建自己定制化的仓储实现类。

abp(net core)+easyui+efcore仓储系统——定义仓储并实现 (四)的更多相关文章

  1. abp(net core)+easyui+efcore仓储系统——解决方案介绍(二)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) ABP框架 首先介绍一下abp框架,abp其 ...

  2. abp(net core)+easyui+efcore仓储系统——领域层创建实体(三)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...

  3. abp(net core)+easyui+efcore仓储系统——展现层实现增删改查之控制器(六)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...

  4. abp(net core)+easyui+efcore仓储系统——创建应用服务(五)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...

  5. 2019年7月16日 abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  6. abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十三)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  7. abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十五)

    core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+e ...

  8. abp(net core)+easyui+efcore实现仓储管理系统——菜单 (十六)

    系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. Delphi中预编译指令

    本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/20/1911250.html <Delphi下深入Windows核心编程>(附录A ...

  2. Massively parallel supercomputer

    A novel massively parallel supercomputer of hundreds of teraOPS-scale includes node architectures ba ...

  3. String方法总结

    蓝背景为与Array相同的方法 一.字符方法 charAt(index):返回在指定位置的字符. var str="abcdefg"; //undefined str[0] //& ...

  4. Android-apktool-就从此处开始反编译之旅

    前言 一直听说过反编译,感觉很高大上,一直没自己用过,今天因缘巧合之下,终于要开始逐渐认识,了解和学习一下反编译了~先给自己说下加油,鼓励一下下 apktool的下载和安装 apktool 下载地址: ...

  5. 简明Python3教程 9.函数

    简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...

  6. mongodb与SQL对应关系表

    1. select查询 mongodb使用find要么findOne要查询: find批量查询. findOne查询记录. find有两个参数: 查询条件. 第二个查询返回的字段. 以下是mongod ...

  7. 3DTools TrackballDecorator实现3D漫游

    原文:3DTools TrackballDecorator实现3D漫游 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/art ...

  8. 【Android发展】它Fragment发展1

    一直知道Fragment非常强大.可是一直都没有去学习,如今有些空暇的时间,所以就去学习了一下Fragment的简单入门.我也会把自己的学习过程写下来,假设有什么不足的地方希望大牛指正,共同进步. 一 ...

  9. 专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)

    url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的Ja ...

  10. 【转】opencart 源码解析

    前台控制程序列表-catalog/controller Catalog|controller|account 会员功能 |—— account.php 会员功能主頁|—— address.php 会员 ...