ef-core
Get best practices for Entity Framework Core
Summary
- Purpose
- Provides practical guidance for structuring EF Core contexts and entities and handling queries, persistence, migrations, security, and tests.
- When to use
- Use when designing or reviewing EF Core data models, queries, migrations, change tracking, or database tests.
- Outputs
- Actionable recommendations cover model design, query efficiency, safe migrations, persistence behavior, security, and testing.
Upstream changes (7, latest included 2026-02-19)
caab1f6 Convert all prompts to skills and update plugin manifests Adds an EF Core best-practices skill covering DbContext and entity design, performance, migrations, querying, change tracking and saving, security, and testing. 2f9c96d Fix deprecated 'mode' attribute in prompt files by renaming to 'agent' (#441) Renames the prompt front-matter key from `mode` to `agent`. 2b45ca4 feat: update deprecated tool names to namespaced versions (#365) Changes the prompt's tools list entry from `codebase` to `search/codebase`. 69cd4fa update `editFiles` to `edit/editFiles` (#319) Changes the prompt's tools list entry from `editFiles` to `edit/editFiles`. 6fb794b Update development instructions and guidelines (#29) Changes the prompt front matter's `mode`, `tools`, and `description` values from double-quoted to single-quoted strings. 9872a77 Improving the tools for prompts Updates the tools list, retaining `codebase` and replacing `terminalCommand` with `changes`, `editFiles`, `problems`, and `runCommands`. 4c8ad05 Initial setup of repo with prompts and instructions Adds an EF Core best-practices prompt covering DbContext and entity design, performance, migrations, querying, change tracking and saving, security, and testing. npx skills add "lettucebo/Skills#v2.2.0@ef-core" --full-depth ⚠ Available after v2.2.0 is published
Entity Framework Core Best Practices
Your goal is to help me follow best practices when working with Entity Framework Core.
Data Context Design
- Keep DbContext classes focused and cohesive
- Use constructor injection for configuration options
- Override OnModelCreating for fluent API configuration
- Separate entity configurations using IEntityTypeConfiguration
- Consider using DbContextFactory pattern for console apps or tests
Entity Design
- Use meaningful primary keys (consider natural vs surrogate keys)
- Implement proper relationships (one-to-one, one-to-many, many-to-many)
- Use data annotations or fluent API for constraints and validations
- Implement appropriate navigational properties
- Consider using owned entity types for value objects
Performance
- Use AsNoTracking() for read-only queries
- Implement pagination for large result sets with Skip() and Take()
- Use Include() to eager load related entities when needed
- Consider projection (Select) to retrieve only required fields
- Use compiled queries for frequently executed queries
- Avoid N+1 query problems by properly including related data
Migrations
- Create small, focused migrations
- Name migrations descriptively
- Verify migration SQL scripts before applying to production
- Consider using migration bundles for deployment
- Add data seeding through migrations when appropriate
Querying
- Use IQueryable judiciously and understand when queries execute
- Prefer strongly-typed LINQ queries over raw SQL
- Use appropriate query operators (Where, OrderBy, GroupBy)
- Consider database functions for complex operations
- Implement specifications pattern for reusable queries
Change Tracking & Saving
- Use appropriate change tracking strategies
- Batch your SaveChanges() calls
- Implement concurrency control for multi-user scenarios
- Consider using transactions for multiple operations
- Use appropriate DbContext lifetimes (scoped for web apps)
Security
- Avoid SQL injection by using parameterized queries
- Implement appropriate data access permissions
- Be careful with raw SQL queries
- Consider data encryption for sensitive information
- Use migrations to manage database user permissions
Testing
- Use in-memory database provider for unit tests
- Create separate testing contexts with SQLite for integration tests
- Mock DbContext and DbSet for pure unit tests
- Test migrations in isolated environments
- Consider snapshot testing for model changes
When reviewing my EF Core code, identify issues and suggest improvements that follow these best practices.