一.仓储的简单介绍

仓储(Repository):这是属于领域层的重要组成部分,它的作用就是完成和数据库的交互工作,仓储里封装了很多操作数据库的方法。所以说仓储是数据映射层和领域层的交互中介。ABP针对不同的ORM框架对仓储的接口做了实现,当然这些实现只是针对一些比较常用的数据操作,对于一些复杂的接口,需要自己实现,当然大多数情况下,ABP框架实现的接口,已经完全够用的。

二.领域层的具体实践

因为只要定义好了实体,ABP框架其实就已经为我们默认实现了相应的仓储接口IRepository<MovieTicket>,我们是不需要手动创建仓储的,直接进行应用服务层代码的编写。如果系统实现的仓储中的方法无法达到需求,可以自定义仓储。因为仓储是属于领域层,所以我们把自定义的仓储接口定义在Core层,将仓储的具体实现放在EntityFrameworkCore层。

(1). 在Core层创建了一个IMovieTicketRepository的接口。

(2).在EF层创建创建实现类,并实现自定义的接口,此时需要继承ABP模板中为我们实现的仓储父类StudyABPProjectRepositoryBase,这个类中实现了IRepository接口中的自定义方法。

此时Core层已经定义好了(此时上面的代码都是多此一举的。。。多此一举的。。。)

其实当我们在Application层的service中使用自定义的仓储时候,发现自己入坑了。。。此时会报错误,错误的基本内容就是Castle注入的仓储为null。。。。其实说到底我们的仓储就是没有注入。这是因为我们的构造函数是自动生成的,然而生成的却是protected。。。。,只有是public的时候仓储才可注入。

三.仓储的三个注意点

1. 仓储的生命周期:

仓储都是临时性的,需要的时候创建,用完销毁。

2. 数据库的连接和管理

仓储的方法中,数据库的连接和管理都是由ABP框架自动处理的。当方法被调用的时候,ABP自动开启数据库的连接同时开启事务,当方法结束后,ABP会将实体数据保存,然后断开连接。当在仓储方法中调用仓储方法的时候,此时只会创建一个数据库连接,他们共同享用数据库连接和事务,由最上层的那个仓储方法进行管理。

3. 仓储的最佳实践

在ABP框架初始化的时候已经为每一个实体类都默认的实现了相应的仓储,这些仓储里的方法基本可以满足日常的开发需求,所以不要自己手动创建仓储。

ABP之仓储的更多相关文章

  1. ABP框架 - 仓储

    文档目录 本节内容: 默认仓储 自定义仓储 自定义仓储接口 自定义仓储实现 基仓储方法 查询 获取单个实体 获取实体列表 关于 IQueryable 自定义返回值 插入 更新 删除 其它 关于异步方法 ...

  2. ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...

  3. ABP领域层——仓储(Repositories)

    ABP领域层——仓储(Repositories) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是 ...

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

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

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 自定义仓储之增删改查

    上一篇文章(https://www.cnblogs.com/meowv/p/12913676.html)我们用Code-First的方式创建了博客所需的实体类,生成了数据库表,完成了对EF Core的 ...

  6. ABP 数据访问 - IRepository 仓储

    ABP系列,这个系列来的比较晚,很多大佬其实已经分析过,为什么现在我又来一轮呢? 1.想自己来完整的学习一轮ABP 2.公司目前正在使用ABP,准备迁移Core 基于以上的目的,开始这个系列 ABP ...

  7. ABP领域层

    1.实体Entites 1.1 概念 实体是DDD(领域驱动设计)的核心概念之一. 实体是具有唯一标识的ID且存储在数据库总.实体通常被映射成数据库中的一个表. 在ABP中,实体继承自Entity类. ...

  8. ABP理论学习之EntityFramework集成

    返回总目录 本篇目录 Nuget包 创建DbContext 仓储 仓储基类 实现仓储 自定义仓储方法 阅读其他 ABP可以使用任何ORM框架工作,并且已经内置了EntityFramework集成.这篇 ...

  9. 关于领域驱动设计(DDD)仓储的思考

    为什么需要仓储呢?领域对象(一般是聚合根)的被创建出来后的到最后持久化到数据库都需要跟数据库打交道,这样我们就需要一个类似数据库访问层的东西来管理领域对象.那是不是我们就可以设计一个类似DAL层的东东 ...

随机推荐

  1. go语言圣经

    https://books.studygolang.com/gopl-zh/index.html

  2. 关于Android打版本号的小白文

    尽管常常和android打交道.但事实上我对android不是非常了解. 这里记录一下ant编译androidproject的过程,然后顺便记录一下android的一些基本概念.不求渡人,但求渡己.这 ...

  3. 8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource

    8.3.1 Resource实现类------InputStreamResource:访问输入流资源的实现类.ByteArrayResource:访问字节数组资源的实现类. 5. 访问字节数组资源 ⊙ ...

  4. Bypass D盾_IIS防火墙SQL注入防御(多姿势)

    0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略 ...

  5. JavaScript 简介--对javascript的初识,最基础的了解

    一.javascript的介绍 JavaScript是网景(Netscape)公司开发的一种基于客户端浏览器.面向(基于)对象.事件驱动式的网页脚本语言.JavaScript语言的前身叫作Livesc ...

  6. composer安装指定版本的laravel

    composer create-project laravel/laravel blog 4.2.*

  7. ThinkPHP5 封装邮件发送服务(可发附件)

    1.Composer 安装 phpmailer 1 composer require phpmailer/phpmailer 2.ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend ...

  8. linux下的shell操作mysql

    (1)MySQL的启动 重启了一次服务器后,使用> mysql -u root -p登陆是出现下面的错误: ERROR 2002 (HY000): Can't connect to local ...

  9. find中的-print0和xargs中-0的奥妙

    原文地址:find中的-print0和xargs中-0的奥妙作者:改变自己 默认情况下, find 每输出一个文件名, 后面都会接着输出一个换行符 ('n'), 因此我们看到的 find 的输出都是一 ...

  10. hibernate annotation多对多中间表添加其他字段的第三种方法

    本示例主要以学生(T_Student)和课程(T_Course)之间的多对多关系,中间表Score(分数),学生表和课程表是多对多关系,另外为他们的关系添加额外的字段---分数: T_Student类 ...