ABP源码分析二十八:ABP.MemoryDB
这个模块简单,且无实际作用。一般实际项目中都有用数据库做持久化,用了数据库就无法用这个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相关推荐
- 【转】ABP源码分析二十八:ABP.MemoryDB
这个模块简单,且无实际作用(该模块用于支持ABP框架单元测试的).一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了.原因在于ABP限制了UnitOfWork的类型只能 ...
- 【转】ABP源码分析三十八: ABP.Web.Api.OData
如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...
- 【转】ABP源码分析二十九:ABP.MongoDb
这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...
- 【转】ABP源码分析二十六:核心框架中的一些其他功能
本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...
- 【转】ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
- 【转】ABP源码分析二十四:Notification
NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...
- 【转】ABP源码分析二十二:Navigation
MenuDefinition:封装了导航栏上的主菜单的属性. MenuItemDefinition:封装了主菜单的子菜单的属性.子菜单可以引用其他子菜单构成一个菜单树 UserMenu/UserMen ...
- 【转】ABP源码分析二十:ApplicationService
IApplicationService : 空接口,起标识作用.所有实现了IApplicationService 的类都会被自动注入到容器中.同时所有IApplicationService对象都会被注 ...
- ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
最新文章
- 通过apt自动生成建造者模式单线程版代码(一)
- OSChina 周一乱弹 —— 抱着漂亮袜子就亲了一口
- quartz源码解析--转
- Ubuntu配置静态ip联网总结
- 200917阶段一C++双向链表模板
- androidstudio调用系统相机为什么resultcode一直返回0_函数递归调用?看这文就够了...
- 嵌入式Linux入门6:u-boot移植
- C# 中的readonly属性
- 移动网络新漏洞影响2G 以来的所有蜂窝网络
- LeetCode 139. 单词拆分(动态规划)
- java代码区出现红色,绿色怎么办
- 【ML学习笔记】2:机器学习中的数学基础2(琴生不等式,概率公式,统计量)
- html 页面文字不能复制粘贴,网页文字无法复制粘贴 复制粘贴不能用
- Facebook想要成为下一个微信,难!
- 为什么说串行比并行速度快?
- SSM 实战项目遇到的问题
- 分析IBM JVM上的heap dump 文件phd格式
- win10系统winkawaks 运行游戏只有声音没有画面该怎么办?
- coalesce 函数详解与学习记录
- OXFeeeFeee指针的含义
热门文章
- 计算机培训营,计算机学院举办科创训练营第三期培训
- php登录界面模板美化,一款简单好看的登录界面——Typecho美化包 Sign-Page-For-Typecho...
- window.open ()的用法
- Python 语言程序设计(4-1)分支循环语句
- python 招聘 少_Python招聘需求猛增123%!学完Python工资多少?
- ggthemes包:丰富ggplot2的表现力
- 关于数据分析部门组织架构的探讨
- redis mysql 雪崩_Redis缓存雪崩、缓存穿透、并发等5大难题,你有没有解决方案
- arduino数码管显示0到9_少儿Python程序第十二讲:单片机控制数码管
- 系统学习NLP(二十五)--语种识别landID