Avec Entity Framework Core, comment générez-vous le modèle EF et les entités?
Selon ASP.NET Core - Base de données existante Article Microsoft, vous devez exécuter une commande semblable à celle-ci dans la console du gestionnaire de package:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Cela ne vous donne aucun contrôle sur les tables ou les vues à importer. Est-il possible que ce soit le seul moyen de procéder à l'ingénierie inverse de la base de données et de créer les modèles et les entités EF maintenant avec EF Core et comment progresse-t-il par rapport à la manière dont cela a été fait avec Entity Framework complet depuis des années?
Il n’existe aucun moyen de le faire dans Entity Framework Core . Lisez la documentation ici: https://docs.Microsoft.com/en-us/ef/efcore-and-ef6/features
Je sais que cette question est un peu ancienne, mais je pense qu'elle est très utile pour les personnes qui tombent sur le même problème.
Si j'ai bien compris votre question, vous souhaitez spécifier les tables à générer . Cela devrait être possible si vous ajoutez le paramètre -Tables
à la commande.
Voici la commande que j'ai utilisée pour générer 3 tables de la base de données (dans la console Package-Manager):
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;"
-Provider Microsoft.EntityFrameworkCore.SqlServer
-OutputDir Models -Context NorthwndContext
-Tables Products,Categories,Suppliers -Force
Comme vous pouvez le constater, j'utilise la base de données Northwnd et ne génère que les tableaux "Produits, catégories et fournisseurs". Évidemment, vous pouvez ajouter plus de tableaux, il vous suffit de les séparer par des virgules.
Si vous ne le savez pas, vous pouvez obtenir le nom de la base de données en allant dans Connexions de données (Explorateur de serveurs), cliquez sur la base de données que vous souhaitez ajouter et sur le côté droit (Propriétés), vous verrez une propriété (nom). Pour moi, c'était "NORTHWND.MDF".
J'ai utilisé -Force
pour remplacer les modèles que j'ai déjà créés.
Vous pouvez utiliser -DataAnnotations
pour obtenir des modèles annotés. Sinon, vous obtenez une configuration de modèle Fluent.
PS: Je n'ai essayé cela qu'avec ASP.NET Core 2 et Entity Framework Core 2.0.0.
Ma situation était que j'avais une bibliothèque de classe .net 4.5+ avec DbContexts dedans.
Ces DbContexts avaient été créés à partir d'une base de données existante à l'aide de l'assistant "Code d'abord de la base de données existante". Ce Wizard semble manquer à EF Core.
Pour créer un nouveau code d'abord DbContext à partir d'une base de données existante compatible avec EF Core, j'ai suivi vaguement le guide ici
Mes pas:
Création d'une nouvelle bibliothèque de classes de base
Ajout du package de nuget Microsoft.EntityFrameworkCore
Ajout du package de nuget Microsoft.EntityFrameworkCore.SqlServer.Design
Ouverture de la console du gestionnaire de packages de nuget
Entré le commande
Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;"
Entré en tant que fournisseur
Microsoft.EntityFrameworkCore.SqlServer
Veuillez noter que lorsque vous utilisez un projet non principal, vous pouvez rencontrer des problèmes avec la console du gestionnaire de packages de nuget. J'ai évité ce problème en créant simplement une nouvelle bibliothèque de classes principale au lieu d'une bibliothèque .net.
Une fois que vous avez créé le contexte, vous pouvez le modifier comme d'habitude dans Code First, par exemple. vous pouvez supprimer les tables que vous ne voulez pas utiliser.
Vous pouvez également appliquer la méthode du tricheur: Ouvrez VS2015, créez une nouvelle classe lib avec le même nom que le projet réel, puis exécutez l'Assistant Modèle de données d'entité.
Une fois que vous avez terminé, copiez et collez dans votre projet principal .net. Il faut un peu de peaufinage du code résultant, mais c'est trivial.
Cependant, exécuter la commande scaffold comme ci-dessus est une meilleure solution.
Ceux qui veulent convertir le schéma de base de données SQL en noyau EF à l’aide de dotnet core suivent les étapes suivantes:
Exécutez toutes les commandes l'une après l'autre (première commande pour ceux qui veulent créer un nouveau projet, sinon vous pouvez l'ignorer et simplement exécuter d'autres commandes depuis le dossier racine de votre projet).
dotnet new mvc -o <ProjectName>
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet tool install --global dotnet-aspnet-codegenerator
Finalement...
dotnet ef dbcontext scaffold "Server=servername\instancename;Database=My_Database;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
Cela créera les modèles nécessaires et le contexte de votre schéma de base de données dans le dossier models de votre projet.
Maintenant, vous pouvez facilement générerCRUDcode en appliquant la commande suivante:
dotnet aspnet-codegenerator controller -name <MyNewController> -m <ModelName> -dc <MyDbContext> --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
Modifiez le MyNewController avec le nom du contrôleur souhaité, ModelName avec le nom du modèle dans le dossier modèles que vous souhaitez cibler et enfin MyDbContext avec le nom du fichier de contexte généré par le système disponible dans le dossier Modèles
mais avant d’exécuter cette commande, assurez-vous d’avoir apporté les modifications nécessaires dans votre fichier appsettings.json et startup.cs dans le dossier de votre projet.
appsettings.json ajouter après la ligne
"AllowedHosts": "*",
"ConnectionStrings": {
"MyDbConnection": "Server=servername\\instancename;Database=My_Database;Trusted_Connection=True;"
}
startup.cs fichier ajouter juste avant la ligne
services.AddMvc (). SetCompatibilityVersion (CompatibilityVersion.Version_2_2);
services.AddDbContext<SwiftRbs_LocalContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));
Prendre plaisir!!