Bonnes pratiques Entity Framework Core
Votre objectif est de vous aider à suivre les bonnes pratiques lors du travail avec Entity Framework Core.
Conception du DbContext
- Gardez les classes DbContext ciblées et cohésives
- Utilisez l'injection de constructeur pour les options de configuration
- Surchargez OnModelCreating pour la configuration via l'API fluide
- Séparez les configurations d'entités en utilisant IEntityTypeConfiguration
- Envisagez d'utiliser le pattern DbContextFactory pour les applications console ou les tests
Conception des entités
- Utilisez des clés primaires significatives (considérez les clés naturelles vs substituts)
- Implémentez des relations appropriées (un-à-un, un-à-plusieurs, plusieurs-à-plusieurs)
- Utilisez les annotations de données ou l'API fluide pour les contraintes et validations
- Implémentez les propriétés de navigation appropriées
- Envisagez d'utiliser les types d'entité possédées pour les objets de valeur
Performance
- Utilisez AsNoTracking() pour les requêtes en lecture seule
- Implémentez la pagination pour les grands ensembles de résultats avec Skip() et Take()
- Utilisez Include() pour charger avec impatience les entités associées si nécessaire
- Envisagez la projection (Select) pour récupérer uniquement les champs requis
- Utilisez les requêtes compilées pour les requêtes exécutées fréquemment
- Évitez les problèmes de requête N+1 en incluant correctement les données associées
Migrations
- Créez des migrations petites et ciblées
- Nommez les migrations de façon descriptive
- Vérifiez les scripts SQL de migration avant d'appliquer en production
- Envisagez d'utiliser les bundles de migration pour le déploiement
- Ajoutez l'amorçage de données par les migrations le cas échéant
Interrogation
- Utilisez IQueryable judicieusement et comprenez quand les requêtes s'exécutent
- Préférez les requêtes LINQ fortement typées aux requêtes SQL brutes
- Utilisez les opérateurs de requête appropriés (Where, OrderBy, GroupBy)
- Envisagez les fonctions de base de données pour les opérations complexes
- Implémentez le pattern specifications pour les requêtes réutilisables
Suivi des modifications et sauvegarde
- Utilisez des stratégies de suivi des modifications appropriées
- Regroupez vos appels SaveChanges()
- Implémentez le contrôle de concurrence pour les scénarios multi-utilisateurs
- Envisagez d'utiliser les transactions pour plusieurs opérations
- Utilisez les durées de vie appropriées du DbContext (scoped pour les applications web)
Sécurité
- Évitez l'injection SQL en utilisant des requêtes paramétrées
- Implémentez les permissions d'accès aux données appropriées
- Soyez prudent avec les requêtes SQL brutes
- Envisagez le chiffrement des données pour les informations sensibles
- Utilisez les migrations pour gérer les permissions des utilisateurs de base de données
Tests
- Utilisez le fournisseur de base de données en mémoire pour les tests unitaires
- Créez des contextes de test séparés avec SQLite pour les tests d'intégration
- Simulez DbContext et DbSet pour les tests unitaires purs
- Testez les migrations dans des environnements isolés
- Envisagez les tests de snapshot pour les modifications de modèle
Lors de la révision de votre code EF Core, identifiez les problèmes et suggérez des améliorations qui suivent ces bonnes pratiques.