用途:在 Bitwarden 代码库中实现 Dapper 仓储方法与 MSSQL 存储过程。所有 Dapper 实现位于 src/Infrastructure/Dapper/Repositories/,每个仓储类实现 src/Core/ 中的接口,数据库操作默认使用存储过程,仓储方法保持轻量,仅做 C# 参数到 SQL 参数、结果集到领域对象的映射。
主要能力与工作流:1) 在 src/Sql/dbo/Stored Procedures/ 定义或更新存储过程,使用普通 CREATE PROCEDURE(SSDT 语法);2) 在 util/Migrator/DbScripts/ 创建迁移脚本,使用 CREATE OR ALTER PROCEDURE(幂等);3) 在仓储中用 DapperServiceProvider 调用过程;4) 使用 [DatabaseData] 特性编写集成测试。存储过程是 MSSQL 查询行为的唯一事实来源。命名遵循 {Entity}_{Action},如 User_Create、Cipher_ReadManyByUserId。
关键规则:SSDT 源文件用 CREATE PROCEDURE,迁移脚本用 CREATE OR ALTER;SSDT 表文件中 CREATE TABLE 与后续索引之间需 GO 分隔;新增参数必须可空并带默认值;新增 NOT NULL 列应使用内联默认值而非先加可空再改;不要在迁移脚本中为大表建索引,也不要指定 ONLINE = ON;默认值仅用于 BIT、TINYINT、INT、BIGINT 等数值类型;修改表后需对相关视图调用 sp_refreshview,修改视图后对依赖过程调用 sp_refreshsqlmodule;GUID 列使用 UNIQUEIDENTIFIER,由 CoreHelpers.GenerateComb() 生成,禁用 NEWID()/NEWSEQUENTIALID();每个存储过程开头 SET NOCOUNT ON;参数用 PascalCase 的 @ParamName;约束命名 PK_TableName、FK_Child_Parent、IX_Table_Column、DF_Table_Column;每个过程一个文件。
限制:每个存储过程的行为必须在 EF Core 实现中精确复现,复杂逻辑需明确记录预期行为。资料未提供安装命令、收费或平台信息。