SKILL.md
readonly只读
name
ef-core
description
获取 Entity Framework Core 的最佳实践
Entity Framework Core 最佳实践
你的目标是帮助我在使用 Entity Framework Core 时遵循最佳实践。
数据上下文设计
- 保持 DbContext 类专注且内聚
- 使用构造函数注入配置选项
- 重写 OnModelCreating 进行 Fluent API 配置
- 使用 IEntityTypeConfiguration 分离实体配置
- 考虑对控制台应用或测试使用 DbContextFactory 模式
实体设计
- 使用有意义的主键(考虑自然键与代理键)
- 实现正确的关系(一对一、一对多、多对多)
- 使用数据注解或 Fluent API 进行约束和验证
- 实现适当的导航属性
- 考虑对值对象使用自有实体类型
性能
- 对只读查询使用 AsNoTracking()
- 使用 Skip() 和 Take() 对大型结果集进行分页
- 在需要时使用 Include() 进行预先加载相关实体
- 考虑使用投影(Select)仅检索所需字段
- 对频繁执行的查询使用编译查询
- 通过正确包含相关数据避免 N+1 查询问题
迁移
- 创建小型、专注的迁移
- 为迁移命名时使用描述性名称
- 在应用到生产环境前验证迁移 SQL 脚本
- 考虑使用迁移包进行部署
- 在适当时通过迁移添加数据种子
查询
- 谨慎使用 IQueryable 并理解查询何时执行
- 优先使用强类型 LINQ 查询而非原始 SQL
- 使用适当的查询运算符(Where、OrderBy、GroupBy)
- 对复杂操作考虑使用数据库函数
- 实现规约模式以实现可重用查询
更改跟踪与保存
- 使用适当的更改跟踪策略
- 批量调用 SaveChanges()
- 对多用户场景实现并发控制
- 对多个操作考虑使用事务
- 使用适当的 DbContext 生命周期(Web 应用中使用作用域)
安全性
- 通过使用参数化查询避免 SQL 注入
- 实现适当的数据访问权限
- 谨慎使用原始 SQL 查询
- 对敏感信息考虑数据加密
- 使用迁移管理数据库用户权限
测试
- 对单元测试使用内存数据库提供程序
- 对集成测试使用 SQLite 创建单独的测试上下文
- 对纯单元测试模拟 DbContext 和 DbSet
- 在隔离环境中测试迁移
- 考虑对模型更改进行快照测试
在审查我的 EF Core 代码时,请识别问题并提出遵循这些最佳实践的改进建议。






