Squirrel 有松鼠、贮藏的意思。Squirrel Framework 正致力于让你轻盈、快速地构建基于 MongoDB / Azure Cosmos DB 的应用程序。
如何获取并使用?
- 查看这篇介绍,只需 4 步即可完成全部基础构建
- Squirrel Framework 类库完全基于 .NET Standard 2.0 构建,查看它的依赖关系
- 查看 README 及源代码 – GitHub
历史版本说明
新版本 1.0.15 改进列表
# 全局改进
- 修复 Unit Test Project 无法正常编译的问题(原因是由于测试工程及相关工程分别通过 Nuget 方式及 Project Reference 方式同时引用了已发布的 Domain.Model 项目,导致循环引用)
- 将测试工程从 MSTest 框架迁移为 XUnit Test 框架,并更新测试用例
- 为 XUnit 提供一个 Owner 标签的扩展
- 更改数据库连接串配置文件的配置方法,现在将默认使用 mongodbsettings.json 作为数据库连接串及默认数据库名的配置。原配置文件 Config/mongodb.config 及 redis.config 将于下一个版本废弃。
- 提供一个基于 ASP.NET Core Web API 的示例程序,请查看这里
# SquirrelFramework – 发布 1.0.15 版本
- 提供自动分库/分表机制。通过设定 RepositoryContext 上下文对象,绑定当前线程的分库信息,自动实现分库或分表,我们可以将其应用于 Tenant 租户分库或按月分表等需求,你只需在程序初始化时设定基本信息,并为具体用户访问时,根据业务逻辑绑定 Tenant 信息 或 其他分表信息即可
RepositoryContext.InitializePartitionSupportLevel( PartitionLevel.CollectionLevel); RepositoryContext.InitializeCollectionLevelParams( "{0:collectionBaseName}_{1:currentPartitionName}"); RepositoryContext.BindCurrentPartition("TenantAlpha"); // OR // RepositoryContext.BindCurrentPartition("201901");
- 修改 MongoDB _id 与 实体基类 Id 字段的映射配置,MongoDB 改用 ObjectId 类型进行存储(而不是 string 类型),实体类 Id 字段依然选择使用 string 类型表示。ObjectId 类型的选择亦可提升主键查询效率及分布式场景的可靠性
- 开放基于 Mongo Database Object 的命令执行方法,方法签名如下:
public IMongoDatabase GetMongoDatabaseObject(string databaseName = "")
从现在起,你可以这样执行 Command:
var dbObject = this.TestCrudRepository.GetMongoDatabaseObject(); // 从删库到跑路 var dropDatabaseCommand = new JsonCommand<BsonDocument>( "{ dropDatabase: 1 }"); dbObject.RunCommand(dropDatabaseCommand);
- 开放基于 Linq 的查询方法,方法签名如下:
public IMongoQueryable<TDomain> AsQueryable(string collectionName)
从现在起,你可以这样查询:
var regex = new Regex("hendry", RegexOptions.IgnoreCase); var collection = this.TestCrudRepository.AsQueryable(); var query = from u in collection where regex.IsMatch(u.Name) && u.Age < 18 orderby u.Name select u; Assert.Equal(1, query.Count());
* 目前 Squirrel Framework 已支持 定制封装、Linq、Lambda、Mongo Database Object Command 四种查询方式,并且通过 Linq 查询,我们可以直接获取查询结果的部分字段,或进行连表查询,具体方式请参考《Squirrel Framework 查询入门》进行了解
- 提供数据库检查状态确认方法,方法签名如下:
public bool Ping()
未来版本计划
下一版本 1.0.16
- 为所有公开方法提供调用说明,并构建一个方法说明站点
- 进一步增强 Get Partial Fields 机制,允许对 MongoDB 某表的部分字段进行查询(泛型模板 及 dynamic 方式),目前只能通过 Linq 查询方式完成这一需求
- 进一步增强关联查询机制,目前只能通过 Linq 查询方式完成这一需求,稍后将提供一个轻量有效的自动关联查询与存储机制
- 事物支持
Backlog
- Nuget 发布目标修改为 V3 版本
- 详细测试及优化周边搜索方法,GetNearBy() 方法增加查询条件 filter
- Azure DevOps CI/CD 集成
- MongoDB / Cosmos DB 功能单元测试达到 100% 覆盖率
- 替换 StackExchange.Redis 引用
- 类方法接口化
1.1.0
- 作为长期稳定版本
- 发布一个等效的 Java 版本类库