web-dev-qa-db-fra.com

Première approche de base de données .Net 2.0 Scaffold-DbContext de la base de données Mysql

Je développe des API Web dans .Net Core 2.0 avec MySQL DB. J'essaie d'échafauder MySQL DB. J'ai suivi Ce lien (site officiel MySQL) mais lorsque je lance la commande d'échafaudage, les erreurs que je mentionne ci-dessous sont signalées ci-dessous. Console du gestionnaire de paquets)

Scaffold-DbContext "server=localhost;port=3306;user=root;password=darshan7826;database=sakila" MySql.Data.EntityFrameworkCore -OutputDir sakila -f

Erreur lors de l'exécution de la commande ci-dessus

System.NotImplementedException: The method or operation is not implemented.
at MySql.Data.EntityFrameworkCore.Scaffolding.Internal.MySQLDatabaseModelFactory.Create(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas)
at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.Create(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Scaffolding.Internal.ModelScaffolder.Generate(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas, String projectPath, String outputPath, String rootNamespace, String contextName, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable`1 schemas, IEnumerable`1 tables, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable`1 schemaFilters, IEnumerable`1 tableFilters, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
The method or operation is not implemented.
8
Darshan Dave

Après avoir creusé, j’ai trouvé que .Net Core 2.0 Mysql Connector ne fonctionnait pas correctement Après quelques recherches et RnD, j’ai trouvé Pomelo Foundation de Stack Overflow j’ai essayé et cela fonctionne.

7
Darshan Dave

En examinant le code source officiel du connecteur MySQL pour .Net , vous pouvez constater qu'il n'est pas encore complet pour cette raison:

public DatabaseModel Create(string connectionString, 
    IEnumerable<string> tables, IEnumerable<string> schemas)
{
  throw new NotImplementedException();
}

Vous voudrez peut-être ouvrir un rapport de bogue sur le traqueur de bogues officiel .

Alternativement, il semble y avoir une version bêta beaucoup plus récente que vous pourriez essayer d’essayer. https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/8.0.9-dmr

4
DavidG

Vous devriez exécuter ceci (à partir de Package-Manager-Console): 

Scaffold-DbContext "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;" 
MySql.Data.EntityFrameworkCore -OutputDir Models

ou utiliser: 

dotnet ef dbcontext scaffold

Remarque : Vous devriez être au projet dans lequel le package MySql.Data.EntityFrameworkCore NuGet a été ajouté.

0
M. Artem