Je tiens à souligner qu'il s'agit de .NET Core et que les discussions sur EF 6.0 ne s'appliquent pas à ce problème
J'ai créé mon DbContext et je l'ai ajouté dans DI, mais lorsque je fais dotnet ef database update -v
, il ne veut pas créer la table des migrations __EFMigrationsHistory
.
Existe-t-il une autre commande que je devrais d'abord faire ou s'agit-il d'un bogue de l'adaptateur EF Core MySQL?
using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
using Web.Models;
namespace Web.Infrastructure
{
public class MainDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("connection-string-here");
base.OnConfiguring(optionsBuilder);
}
}
}
Trouver des classes DbContext ...
Utilisation du contexte 'MainDbContext'.
Utilisation de la base de données 'db' sur le serveur 'localhost'.
MySql.Data.MySqlClient.MySqlException: la table 'db .__ EFMigrationsHistory' n'existe pas
Le tableau 'db .__' EFMigrationsHistory 'n'existe pas `` `
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"BundlerMinifier.Core": "2.2.301",
"WebMarkupMin.AspNetCore1": "2.2.1",
"MySql.Data.EntityFrameworkCore": "7.0.6-IR31",
"Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
},
"tools": {
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
"scripts": {
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
En exécutant dotnet ef migrations script
, je reçois du code SQL que je peux exécuter directement dans MySQL. Ensuite, la table des migrations est créée et tout fonctionne normalement. C'est une solution temporaire qui est mauvaise. Je me demande encore quelle est la "bonne" façon d'activer les migrations.
Rencontré le même problème lors de l'utilisation du fournisseur Oracle standard.
Selon cette question La mise à jour de la base de données Dot Net Entity Framework ne crée pas de tables dans la base de données mysql la fonctionnalité de migration n'a pas encore été implémentée.
J'ai suivi les suggestions du fournisseur SapientGuardian et cela semble être la meilleure voie à suivre maintenant.
Edit: comme suggéré dans les commentaires, Pomelo est la meilleure option à partir de 2018. Je l’ai choisie par rapport à d’autres fournisseurs depuis ma réponse initiale.
Transformer le commentaire de Mark G en réponse.
Une fois la table __EFMigrationsHistory créée, le reste de la mise à jour doit s'exécuter.
CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );
Vous pouvez également générer le script de votre/vos migration (s) et l'appliquer à la base de données manuellement à l'aide de cette commande dans la console Package Manager:
Script-Migration
Si vous devez générer tous les scripts, vous pouvez utiliser cette commande:
Script-Migration -from 0
Je rencontre le même problème, le contexte OP peut être légèrement différent, mais voici ma réponse par souci d’exhaustivité.
L'un des moyens par lesquels vous pouvez rencontrer ce problème est si:
Dans ce cas, vous obtiendrez l'erreur signalée par OP
MySql.Data.MySqlClient.MySqlException: Table 'db .__ EFMigrationsHistory' n'existe pas
La solution dans ce cas, consiste à supprimer la base de données complète . Après cela, la commande update-databse s'exécute avec succès.
Je ne sais pas si c'est lié à mysql uniquement, mais pour résumer:
Avait le même problème avec le fournisseur officiel Oracle MySQL.
Le paquet vient d'être ajouté: SapientGuardian.EntityFrameworkCore.MySql Install.