ABP源码分析二十八:ABP.MemoryDB

本文详细分析了ABP框架下MemoryDB模块的使用场景与限制,指出其在实际项目中的局限性,并探讨了与数据库持久化相关的替代方案,如使用EF UnitOfWork。同时,介绍了MemoryDB模块内部结构与实现细节,包括单例MemoryDatabase、IMemoryDatabaseProvider及MemoryDbUnitOfWork等组件,以及它们在模块设计中的角色与功能。最后,整理了ABP源码分析系列文章的目录链接。

这个模块简单,且无实际作用。一般实际项目中都有用数据库做持久化,用了数据库就无法用这个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源码分析系列文章目录

转载于:https://www.cnblogs.com/1zhk/p/5380023.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值