En travaillant sur le projet d’architecture eShopOnWeb, j’ai rassemblé plusieurs trucs et astuces pour bien démarrer avec EF-Core/SQL. J’ai donc créé un nouveau projet API .Net Core et mis en place EF. Ce projet est disponible sur GitHub. Voici une liste d’astuces :
- Lorsque vous allez vouloir créer la base de données avec la commande :
dotnet ef database update
Le message d’erreur suivant peut apparaitre :
dotnet-ef does not exist.
Pour résoudre cela, il faut s’assurer que l’outil donet-ef soit installé. Voir la documentation complète sur docs.microsoft. La commande suivante sera nécessaire.
dotnet tool install --global dotnet-ef
- Si lors de la commande dotnet ef database update vous avez le message suivant :
System.InvalidOperationException: Unable to resolve service for type ‘Microsoft.EntityFrameworkCore.Migrations.IMigrator’. This is often because no database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.

Cela se produit lorsque vous utilisez :
services.AddDbContext<ApplicationDbContext>(options =>
options.UseInMemoryDatabase("MemoryDataBase"));
N’oubliez donc pas dans le Startup.cs d’utiliser un provider, exemple :
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
Ici, on précise bien que l’on va utiliser SQL grâce à la méthode d’extension UseSqlServer venant du package nuget : Microsoft.EntityFrameworkCore.SqlServer.
- No project was found. Change the current working directory or use the –project option.
Dans mon exemple, j’ai découpé le projet en suivant une architecture similaire au projet eShopOnWeb :
- Un projet API.
- Un projet ApplicationCore. Dans les grande lignes ce projet contiendra les entités, services et leurs interfaces,….
- Un projet Infrastructure qui pour le moment contient le contexte EF et le répertoire Migrations
Si vous désirez en apprendre plus sur cette architecture, je vous invite a lire ceci
De ce fait, la commande dotnet ef database update ne sera pas suffisante. Il faudra lui préciser le projet où se trouve le contexte (-p) et également le projet startup où se trouve le point d’entrée et l’accès à la configuration(-s).
dotnet ef database update -p Infrastructure/Infrastructure.csproj -s Api/api.csproj
- Ajouter une migration dans ce type d’architecure
Pour effectuer une migration, vous devrez également passer ces paramètres (-p, -s). En plus de cela, vous pouvez préciser le répertoire de sortie à utiliser.
dotnet ef migrations add InitialCreate -p Infrastructure/Infrastructure.csproj -s Api/api.csproj -o Data/Migrations
- Si lors de la commande dotnet ef migrations add vous avez le message suivant:
Your startup project ‘api’ doesn’t reference Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.

Pour que cela fonctionne, il faut ajouter le package suivant (il faut faire cette commande dans le répertoire du projet API (projet source -p)) :
dotnet add package Microsoft.EntityFrameworkCore.Design

- L’ensemble des commandes réalisées ici ont été faites depuis le répertoire SRC sauf la dernière puisqu’il faut se placer directement sur le projet API
Vous pouvez retrouvez plus d’informations sur EF migrations,database update,… ici.
Pour retrouver l’ensemble des commandes et paramêtres possible pour Entity Framework rendez-vous ici