web-dev-qa-db-fra.com

Essayer de configurer le noyau Entity Framework dans un projet .Net Standard

Je me demandais si je pouvais configurer facilement mon EntityFrameworkCore dans un projet .NET Standard 2.0. Je suivais ceci Tutorial mais cela nécessite soit .NET Core, soit Framework.

Quand je suis arrivé à cette étape:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

J'ai eu cette erreur:

Le projet de démarrage 'NomProjet' cible le cadre '.NETStandard'. Aucun environnement d'exécution n'est associé à ce cadre et les projets le ciblant ne peuvent pas être exécutés directement. Pour utiliser les outils de la console Entity Framework Core Package Manager avec ce projet, ajoutez un projet exécutable ciblant .NET Framework ou .NET Core qui référence ce projet et définissez-le comme projet de démarrage. ou mettez à jour ce projet vers .NET Framework ou .NET Core inter-cibles.

Je me demande si je pourrais configurer mon entité dans .NET Standard ou s'il existe une meilleure pratique à suivre à la place.

25
Joe Jazdzewski

Le projet de démarrage 'NomProjet' cible le cadre '.NETStandard'. Aucune exécution n'est associée à ce cadre et les projets le ciblant ne peuvent pas être exécutés directement. Pour utiliser les outils de la console Entity Framework Core Package Manager avec ce projet, ajoutez un projet exécutable ciblant .NET Framework ou .NET Core faisant référence à ce projet et définissez-le comme projet de démarrage. ou mettez à jour ce projet sur .NET Framework ou .NET Core inter-cibles.

Le message d'erreur signifie ceci: Il n'y a pas de projet exécutable .NET Standard. Il n’ya pas d’exécution, car il s’agit simplement d’un mécanisme de transfert de types pour plusieurs exécutions différentes.

En termes de programmation, c'est n peu comme essayer d'instancier une interface . Vous ne pouvez pas le faire car il n'y a pas d'implémentation à exécuter.

La solution consiste à choisir une plate-forme exécutable sur laquelle votre application s'exécutera. Vous pouvez référencer autant de bibliothèques .NET Standard que vous le souhaitez depuis votre exécutable (tant qu'elles sont compatibles avec votre environnement d'exécution), mais l'exécutable lui-même ne peut pas être exécuté sur .NET Standard. Pour pouvoir s'exécuter, il doit cibler une plate-forme telle que .NET Framework ou .NET Core.

En d'autres termes, pour utiliser une commande pour échafauder votre base de données, vous devez cibler un environnement d'exécution. Vous devrez donc exécuter cette commande tout en ciblant votre projet exécutable principal ou ajouter un nouveau projet exécutable à votre solution pour l'exécuter.

23
NightOwl888

Première réponse ici. J'essaie en fait de faire cela aussi. J'ai eu l'échafaudage mais Net Standard ne semble pas charger les extensions pour les propriétés de la table.

Assurez-vous d’installer le package EntityFrameworkCore.Tools pour EF. Vous avez seulement besoin du support 4.6.1 qui est le support par défaut. Si je trouve comment résoudre le problème des extensions, je posterai ici.

Ces deux sont nécessaires. Package d'installation Microsoft.EntityFrameworkCore.SqlServer Package d'installation Microsoft.EntityFrameworkCore.Tools

2
Christian H
  1. Cliquez avec le bouton droit sur l'application .NET Core dans votre projet.

  2. Cliquer sur Définir comme projet de démarrage

2
Majid joghataey

Ce qui suit fonctionne à partir de la CLI de dotnet en supposant que vous ayez déjà un projet de démarrage exécutable dans la solution:

dotnet ef dbcontext scaffold "Server=myServerName; Database=dbName; User Id=someUser; Password=myPassword123;" Microsoft.EntityFrameworkCore.SqlServer  --project ../MyLibraryProject/ -c MyDbContext -o FolderName

vous pouvez trouver plus d'informations ici:

https://docs.Microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#other-target-frameworks

0
bbqchickenrobot