zoukankan      html  css  js  c++  java
  • ABP之仓储

    一.仓储的简单介绍

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

  • 相关阅读:
    OGG-01168
    浅谈webuploader上传文件
    [ IE浏览器兼容问题 ] Web Uploader 在IE、FireFox下点击上传没反应
    webuploader在ie7下的flash模式的使用
    记一次项目使用webuploader爬坑之旅
    解决Web Uploader上传文件和图片 延迟和not defined
    SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片
    百度上传插件(webupload)单文件(单图片)上传设置
    webservice大文件怎么传输
    java使用WebUploader做大文件的分块和断点续传
  • 原文地址:https://www.cnblogs.com/XZhao/p/8231827.html
Copyright © 2011-2022 走看看