SuperAPI AI 工具集

implementing-ef-core

数据与分析

查看项目

更新于 10-15 20:06

技能介绍

用途:在 Bitwarden 中实现 Entity Framework Core 仓储与迁移,覆盖 PostgreSQL、MySQL、SQLite,并保证与既有 Dapper/存储过程实现行为一致。

主要能力:EF 仓储位于 src/Infrastructure/EntityFramework/Repositories/,每个类实现与 Dapper 对应项相同的接口,用 DbContext 和 LINQ 替代存储过程,但行为必须完全一致;[DatabaseData] 集成测试属性会在所有已配置数据库上运行同一测试,作为一致性保障。

使用方式:运行 pwsh ef_migrate.ps1 <MigrationName> 同时为所有 EF 目标生成迁移;迁移类名必须与 MSSQL 迁移名(来自 YYYY-MM-DD_##_MigrationName.sql 文件名)完全一致。提交前必须审查生成的 Up() 和 Down() 方法。

关键规则:每个实体一个 EntityTypeConfiguration<T> 类,不要在 OnModelCreating 中内联配置;ID 列不要使用 ValueGeneratedOnAdd(),ID 由应用代码 CoreHelpers.GenerateComb() 生成;不要随意添加导航属性,仅当存储过程也 JOIN 对应表时才添加,否则会产生与存储过程不一致的 N+1 查询。

限制:EF Core 的 LINQ 翻译因提供程序而异,PostgreSQL 类型更严格,SQLite 的 ALTER TABLE 支持有限,大小写敏感性取决于数据库排序规则;迁移生成器可能做出非最优决策,如删除重建索引或生成不必要的列修改,且不了解大表注意事项。建议写干净的 LINQ,运行 [DatabaseData] 测试,再修复提供程序特定问题。