9.4 仓储模式
#
9.4.1 什么是仓储在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象,实际上,仓储被用于领域对象在数据库上的操作(实体 Entity 和值对象 Value types)。一般来说,我们针对不同的实体(或聚合根 Aggregate Root)会创建相对应的仓储。
简单来说,仓储就是数据存取操作的载体,但不限定于数据库。
#
9.4.1 内置仓储Furion
框架内置了一个数据库操作的仓储,方便大家拓展和集成:
#
9.4.1.1 非泛型超级仓储IRepository
:默认非泛型仓储接口,支持切换到任何仓储EFCoreRepository
:默认非泛型仓储实现
#
9.4.1.2 泛型实体仓储IRepository<TEntity>
:默认数据库实体仓储接口EFCoreRepository<TEntity>
:默认数据库实体仓储实现
#
9.4.1.3 泛型多数据库实体仓储IRepository<TEntity, TDbContextLocator>
:任意数据库的实体仓储接口EFCoreRepository<TEntity, TDbContextLocator>
:任意数据库的实体仓储实现
Sql
操作仓储#
9.4.1.4 ISqlRepository
:默认数据库Sql
操作仓储接口SqlRepository
:默认数据库Sql
操作仓储实现
Sql
操作仓储#
9.4.1.5 多数据库 ISqlRepository<TDbContextLocator>
:任意数据库的Sql
操作仓储接口SqlRepository<TDbContextLocator>
:任意数据库的Sql
操作仓储实现
#
9.4.1.6 只读实体仓储(支持多库)IReadableRepository<TEntity>
:默认数据库只读实体仓储接口IReadableRepository<TEntity, TDbContextLocator>
:多数据库只读实体仓储实现
#
9.4.1.7 只写实体仓储(支持多库)IWritableRepository<TEntity>
:默认数据库只写实体仓储接口IWritableRepository<TEntity, TDbContextLocator>
:多数据库只写实体仓储实现
#
9.4.1.8 只允许新增实体仓储(支持多库)IInsertableRepository<TEntity>
:默认数据库只允许新增的实体仓储接口IInsertableRepository<TEntity, TDbContextLocator>
:多数据库只允许新增的实体仓储实现
#
9.4.1.9 只允许更新实体仓储(支持多库)IUpdateableRepository<TEntity>
:默认数据库只允许更新的实体仓储接口IUpdateableRepository<TEntity, TDbContextLocator>
:多数据库只允许更新的实体仓储实现
#
9.4.1.10 只允许删除实体仓储(支持多库)IDeletableRepository<TEntity>
:默认数据库只允许删除的实体仓储接口IDeletableRepository<TEntity, TDbContextLocator>
:多数据库只允许删除的实体仓储实现
#
9.4.1.11 只允许拓展操作实体仓储(支持多库)IOperableRepository<TEntity>
:默认数据库只允许拓展操作实体仓储接口IOperableRepository<TEntity, TDbContextLocator>
:多数据库只允许拓展操作实体仓储实现
Sql
查询仓储(支持多库)#
9.4.1.12 只允许 ISqlReaderRepository
:默认数据库只允许Sql
查询仓储接口ISqlReaderRepository<TDbContextLocator>
:多数据库只允许Sql
查询仓储实现
Sql
非查询仓储(支持多库)#
9.4.1.13 只允许 ISqlExecutableRepository
:默认数据库只允许Sql
非查询仓储接口ISqlExecutableRepository<TDbContextLocator>
:多数据库只允许Sql
非查询仓储实现
#
9.4.1.14 读写分离仓储IMSRepository
:最多支持 一主 7 从 仓储
#
9.4.1.15 定位器仓储IDbRepository<TDbContextLocator>
:初始化特定数据库仓储
#
9.4.2 仓储使用Furion
提供了非常多的方式创建仓储,目的是为了让大家可以在不同的场景中使用。
#
9.4.2.1 构造函数注入#
9.4.2.2 方法参数注入Db.GetRepository
获取#
9.4.2.3 特别说明
不管采用哪种方式,Furion
都保证了仓储一次请求唯一性。同时 Db.GetRepository<TEntity>()
方式支持任何静态类中使用。
#
9.4.3 仓储高级用法#
9.4.3.1 动态切换实体仓储#
9.4.3.2 动态切换仓储类型比如,读写分离/主从库仓储:
小知识
.Constraint
支持切换任何仓储类型。
Sql
操作仓储#
9.4.3.3 获取 #
9.4.4 多数据库操作Furion
通过 DbContextLocator
数据库上下文定位器实现多种数据库操作,可以随意切换数据库
#
9.4.4.1 动态切换多个数据库#
动态切换数据库#
另外任何仓储或实体配置都支持多个数据库同时操作仓储方式
动态 sql
方式
实体配置方式
Sql
代理方式
Linq
中方式
#
9.4.5 反馈与建议与我们交流
给 Furion 提 Issue。