这个模块简单,且无实际作用。一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了。原因在于ABP限制了UnitOfWork的类型只能有一个(前文以作介绍),一般用了数据库的必然要注入efUnitOfWork. 而注入了efUnitOfWork就不能在注入MemoryDbUnitOfWork了。

MemoryDatabase:这是一个单例。ABP通过Dictionary<Type, object>+lock作为数据结构来实现内存数据库。其以entity的类型作为key,以entity list为value。

IMemoryDatabaseProvider: 接口返回MemoryDatabase。

UnitOfWorkMemoryDatabaseProvider : 实现IMemoryDatabaseProvider接口,通过调用ICurrentUnitOfWorkProvider的current UnitOfWork的Database获取MemoryDatabase。

MemoryDbUnitOfWork:实现IUnitOfWork接口。ABP在这个本模块中并没有实现事务逻辑。这个类在此模块中只用于返回MemoryDatabase对象。

MemoryRepository<TEntity, TPrimaryKey> : 继承自AbpRepositoryBase<TEntity, TPrimaryKey>,实现了Entity的CRUD操作。(这货居然不是线程安全的。证明这个模块无实际用途的第二个论点)

MemoryRepository<TEntity> : 其与MemoryRepository<TEntity, TPrimaryKey>差异就在于其支持的Entity主键是int类型。

返回ABP源码分析系列文章目录

ABP源码分析二十八:ABP.MemoryDB相关推荐

  1. 【转】ABP源码分析二十八:ABP.MemoryDB

    这个模块简单,且无实际作用(该模块用于支持ABP框架单元测试的).一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了.原因在于ABP限制了UnitOfWork的类型只能 ...

  2. 【转】ABP源码分析三十八: ABP.Web.Api.OData

    如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...

  3. 【转】ABP源码分析二十九:ABP.MongoDb

    这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...

  4. 【转】ABP源码分析二十六:核心框架中的一些其他功能

    本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...

  5. 【转】ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

  6. 【转】ABP源码分析二十四:Notification

    NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...

  7. 【转】ABP源码分析二十二:Navigation

    MenuDefinition:封装了导航栏上的主菜单的属性. MenuItemDefinition:封装了主菜单的子菜单的属性.子菜单可以引用其他子菜单构成一个菜单树 UserMenu/UserMen ...

  8. 【转】ABP源码分析二十:ApplicationService

    IApplicationService : 空接口,起标识作用.所有实现了IApplicationService 的类都会被自动注入到容器中.同时所有IApplicationService对象都会被注 ...

  9. ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

最新文章

  1. 通过apt自动生成建造者模式单线程版代码(一)
  2. OSChina 周一乱弹 —— 抱着漂亮袜子就亲了一口
  3. quartz源码解析--转
  4. Ubuntu配置静态ip联网总结
  5. 200917阶段一C++双向链表模板
  6. androidstudio调用系统相机为什么resultcode一直返回0_函数递归调用?看这文就够了...
  7. 嵌入式Linux入门6:u-boot移植
  8. C# 中的readonly属性
  9. 移动网络新漏洞影响2G 以来的所有蜂窝网络
  10. LeetCode 139. 单词拆分(动态规划)
  11. java代码区出现红色,绿色怎么办
  12. 【ML学习笔记】2:机器学习中的数学基础2(琴生不等式,概率公式,统计量)
  13. html 页面文字不能复制粘贴,网页文字无法复制粘贴 复制粘贴不能用
  14. Facebook想要成为下一个微信,难!
  15. 为什么说串行比并行速度快?
  16. SSM 实战项目遇到的问题
  17. 分析IBM JVM上的heap dump 文件phd格式
  18. win10系统winkawaks 运行游戏只有声音没有画面该怎么办?
  19. coalesce 函数详解与学习记录
  20. OXFeeeFeee指针的含义

热门文章

  1. 计算机培训营,计算机学院举办科创训练营第三期培训
  2. php登录界面模板美化,一款简单好看的登录界面——Typecho美化包 Sign-Page-For-Typecho...
  3. window.open ()的用法
  4. Python 语言程序设计(4-1)分支循环语句
  5. python 招聘 少_Python招聘需求猛增123%!学完Python工资多少?
  6. ggthemes包:丰富ggplot2的表现力
  7. 关于数据分析部门组织架构的探讨
  8. redis mysql 雪崩_Redis缓存雪崩、缓存穿透、并发等5大难题,你有没有解决方案
  9. arduino数码管显示0到9_少儿Python程序第十二讲:单片机控制数码管
  10. 系统学习NLP(二十五)--语种识别landID