ef-core

ef-core

热门

获取 Entity Framework Core 的最佳实践

3.6万Star
4556Fork
更新于 2026/7/13
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 代码时,请识别问题并提出遵循这些最佳实践的改进建议。