这个项目能做什么

概述 此存储库 sqlite-multi-tenant 是一个用于 .NET 的多租户 SQLite 数据库管理器(在存储库元数据中描述为提供每租户隔离、迁移和备份)。其 README 是一个类级别的参考文档:每个部分记录了一个服务、助手或验证器,并附带 C# 使用示例。它被编写为 API 文档而非入门指南,因此以下内容反映了 README 实际演示的功能。 多租户策略 README 的端到端隔离测试描述了两种支持的方法: - 每租户一连接 (Connection-per-tenant):每个租户由独立的物理 SQLite 文件支持,实现文件级隔离。租户的连接字符串仅指向该租户的数据库。 - 共享架构 (Shared-schema):所有租户共享单个 SQLite 文件,通过 TenantId 区分列来限定每次查询,确保每个租户仅读写自己的行。 隔离测试以刻意构造的敌对检查形式呈现,旨在验证在两种模型下,租户都无法读取、更新或删除另一个租户的行。示例测试代码创建每租户临时数据库文件,插入带有租户标记的文档,并断言使用 TenantId 过滤器查询时仅返回该租户的标题。对于包含多个租户行的共享文件也展示了相同的模式。示例中的助手方法用于构建连接字符串、创建包含 Id、TenantId 和 Title 列的 Documents 表、使用参数化命令插入行,以及按租户过滤读取标题。 完整性检查 IntegrityCheckService 在租户数据库中执行 SQLite PRAGMA integrity_check 操作。记录的入口点包括: - 通过 ID 检查单个租户。 - 检查显式租户列表,并带有 maxDegreeOfParallelism 参数。 - 检查系统中的所有租户,同样支持可配置的并行度。 - 仅检查活跃租户。 结果以 TenantIntegrityCheckResult 对象形式呈现,至少公开 TenantId 和 IsOk。可配置的并行度被呈现为一种在验证期间管理系统负载的方法。 租户上下文助手 TenantContextHelperExtensions 为 TenantContextHelper 添加了扩展方法,用于在多租户作用域内工作。README 展示了:检查当前租户是否与目标 ID 匹配;创建可携带租户 ID 和用户 ID 并在 using 块中使用的验证作用域;检索所需的租户上下文;直接检索所需的租户 ID;以及在指定的租户上下文中执行操作或返回值的函数。这些旨在减少围绕租户感知代码路径的重复样板代码。 中间件验证 文档记录了两个验证器: - RateLimitingMiddlewareValidation 验证 RateLimitingMiddleware 实例、RateLimitingConfig 对象(包含 MaxRequestsPerSecond、MaxBurst、WindowSize、Enabled 和 BanDuration 等字段)、RateLimitExceededResult(IsExceeded、RetryAfter、CurrentRequestCount、Limit、Window)以及 RateLimitStatistics(TotalRequests、AllowedRequests、DeniedRequests、PeakRequestsPerSecond、CurrentActiveLimits)。对于每个重载,README 展示了 Validate 返回问题字符串列表,IsValid 返回布尔值,以及 EnsureValid 在输入无效时抛出异常。一个工作流示例演示了在运行前验证中间件配置并捕获由此产生的参数异常。 - ErrorHandlingMiddlewareValidation 提供了验证 ErrorHandlingMiddleware 实例和 Result 对象的扩展方法。它检查空引用、成功标志与错误消息之间的一致性,以及成功结果是否携带非默认值。记录的接口包括中间件上的 Validate、IsValid 和 EnsureValid,以及 Result 值上的相同三个方法,以便在请求管道早期强制执行不变性。 设置访问 SettingsControllerExtensions 为 SettingsController 添加了强类型和批量操作。记录的方法包括:将设置读取为具体类型(可选使用自定义解析函数,例如用于 DateTime);写入强类型值;在一次批量调用中更新设置字典;测试设置是否存在;以及通过谓词过滤检索设置并返回设置值列表。结果被封装在带有 Data 负载的 API 响应对象中,如示例中的 OkObjectResult 检查所示。 序列化实用工具 - ReportGeneratorJsonExtensions 为监控数据(健康摘要、操作统计和性能指标)封装了 System.Text.Json 序列化。它记录了用于写入的 ToJson,用于读取统计数据的 FromJsonToOperationStatistics,以及用于性能指标且返回布尔成功结果的 TryFromJson。 - StringUtilitiesJsonExtensions 对字符串进行序列化和反序列化,包含附加 SHA256 哈希或转换为 snake_case 的变体,以及一个报告成功且不抛出异常的 try-deserialize 方法。 测试实用工具 TenantNameValidatorTestsExtensions 提供了用于租户名称验证的断言式助手:验证名称是否映射到预期的标准化租户 ID,验证名称是否被视为有效的租户 ID,验证无效名称是否产生特定的预期错误消息,以及枚举内置的无效租户 ID 集合及其错误和有效的名称到 ID 的映射。这些旨在从测试套件中重复使用。 评估注意事项 README 是带有使用片段的单个 API 文档;它不包含安装指令、包名称、支持的 .NET 版本、迁移或备份指南,也不包含许可和贡献详情,尽管存储库描述中提到了迁移和备份。示例引用了诸如 SqliteMultiTenant.Services, SqliteMultiTenant.Models, SqliteMultiTenant.Utilities, SqliteMultiTenant.Middleware, SqliteMultiTenant.Monitoring, SqliteMultiTenant.Validation 和 SqliteMultiTenant.Api.Controllers 等命名空间,并依赖于 System.Data.SQLite 和一个测试框架。读者应将示例视为说明性的,并在采用之前对照源代码确认当前的 API、打包方式和隔离保证。README 末尾的重复块表明文档本身存在一些重复。