Guide EF Core - WenesLimem/PRO GitHub Wiki
EF Core (Entity Framework Core) est une version légère, extensible, open source et multiplateforme de la technologie d'accès aux données Entity Framework. EF Core peut servir d'ORM afin de gérer plusieurs technologies de base de données.
Lors du changement, ajout, suppression d'une entité dans le code, la base de données doit être mise à jour.
Pour ça, il existe deux commandes :
- une pour la console du packet manager (=PMC),
- une pour le terminal standard.
C'est la même chose lorsque les modifications des collègues instaurent des changements sur les entités.
- Faire un changement dans le code sur l'entité,
- Ajouter une migration,
- Appliquer une migration,
- Tester.
(souvent on a juste des erreurs liées à SQL)
- Voir que ca ne marche pas,
- Appliquer la migration,
- Voir que ca marche.
ℹ️ Information |
Si vraiment on est bloqué, on peut supprimer notre base de données et recommencer depuis une vide. |
Quoi | PMC | Dot net cli (dans le dossier du .csproj ) |
---|---|---|
Ajout de migrations dans le dossier Migrations | add-migration MyFirstMigration |
dotnet ef migrations add MyFirstMigration |
Application des migrations | Update-Database |
dotnet ef database update |
Les entité doivent dériver de la classe abstraite BaseEntity
Les entités doivent être présentes dans le contexte ApplicationDbContext
sous
la forme de :
public DbSet<TEntity> TEntities { get; set; }
Ensuite un service de donnée doit être fait sur la base de l'exemple suivant :
namespace EkoRestaurant.Services
{
public class IngredientsService : BaseDataService<Ingredient>
{
public IngredientsService(ApplicationDbContext dbContext) : base(dbContext)
{
}
}
}
Puis il faut l'enregistrer dans le Startup.cs
dans la fonction
public void ConfigureServices(IServiceCollection services)
afin de pouvoir y
accéder plus tard grâce à l'injection de dépendances.
Ceci nous permet d'accéder de manière générique aux données au moyen de ces méthodes :
namespace EkoRestaurant.Services.Abstractions
{
interface IDataService<TEntity> where TEntity : BaseEntity
{
TEntity Create(TEntity entity);
void Delete(TEntity entity);
void Delete(int id);
TEntity Edit(TEntity entity);
TEntity GetById(int id);
IEnumerable<TEntity> Filter();
IEnumerable<TEntity> Filter(Func<TEntity, bool> predicate);
void SaveChanges();
}
}
Dans la page utiliser le tag @inject IngredientsService IngredientsService
.
Lors de l'édition des objets il est nécessaire d'appeler SaveChanges()
afin
d'envoyer les changements sur la base de données.
Pour supprimer:
IngredientCategoriesService.Delete(SelectedCategory.Id);
IngredientCategoriesService.SaveChanges();
Pour ajouter:
IngredientsService.Create(res);
IngredientsService.SaveChanges();
Pour modifier utiliser de la même manière TEntity Edit(TEntity entity)
suivi
de SaveChanges()
.
Les méthode TEntity GetById(int id)
, IEnumerable<TEntity> Filter()
,
IEnumerable<TEntity> Filter(Func<TEntity, bool> predicate)
sont à disposition.