Utilisation Entity Framework Core (Erreurs/Résolutions) et astuces…

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.

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.

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
Structure du project

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

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.