EF Core - Table '*.__EFMigrationsHistory' n'existe pas
Je tiens à souligner que c'est .NET de Base et les discussions à ce sujet EF 6.0 ne s'applique pas à ce problème
J'ai créé mon DbContext et de l'ajouter à la DI, cependant quand je fais dotnet ef database update -v
il ne veut pas créer les migrations tableau __EFMigrationsHistory
.
Est-il une autre commande que je dois faire en premier ou c'est un bug de EF Base MySQL adaptateur?
MainDbContext
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);
}
}
}
Erreur
Trouver DbContext classes...
Utilisation d'un contexte 'MainDbContext'.
À l'aide de la base de données 'db' sur le serveur 'localhost'.
MySql.Les données.MySqlClient.MySqlException: Table 'db.__EFMigrationsHistory' n'existe pas
Table 'db.__EFMigrationsHistory' n'existe pas
``
projet.json
{
"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%" ]
}
}
Temp Solution
Par l'exécution de dotnet ef migrations script
- je obtenir le code SQL que je peut exécuter directement dans MySQL. Après que les migrations tableau est créé et tout fonctionne normalement. C'est temp-solution qui est mauvais. Je me demande encore qu'est-ce que la "bonne" façon de permettre aux migrations.
- Veuillez spécifier les versions des paquets que vous utilisez.
- Cette chaîne de connexion vous permet d'accéder à un compte, qui a l'autorisation de créer des tables? En d'autres termes, êtes-vous en mesure de créer la table manuellement à l'aide de cette chaîne de connexion?
- J'ai ajouté des paquets.json. Bien sûr, j'en ai plein les autorisations de base de données. Une fois que j'ai ajouter la table manuellement les migrations de travail et mon
User
modèle de tableau est créé pour moi et je peux faire des activités avec elle. - Je viens de rencontré le même problème avec ef core + mysql en essayant de suivre docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db Ajoutez-les Migrations fonctionne ok mais la mise à Jour de la Base de données génère cette erreur
- Une solution de contournement consiste à créer le tableau suivant manuellement avant de lancer "dotnet ef base de données mise à jour"
CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );
Vous devez vous connecter pour publier un commentaire.
Marque G le commentaire de répondre à la question.
Une fois l' __EFMigrationsHistory table a été créée, le reste de la mise à jour devrait fonctionner.
Sinon, générer le script de migration(s) et de les appliquer à la base de données manuellement à l'aide de cette commande dans la Console du Gestionnaire de Package:
Si vous avez besoin de générer Tous les scripts, vous pouvez utiliser cette commande:
Rencontré le même problème lors de l'utilisation standard d'Oracle fournisseur.
Conformément à cette question Dot Net Entity Framework de base de données mise à jour n'est pas de créer des tables dans la base de données mysql il n'a pas les migrations fonctionnalité encore mis en œuvre.
j'ai suivi les suggestions de la commuté à SapientGuardian fournisseur et il ne semble pas être la meilleure façon de le faire maintenant.Edit: comme suggéré dans les commentaires de Pamplemousse est la meilleure option au début de 2018. J'ai choisi par rapport à d'autres fournisseurs depuis ma réponse originale à cette question.
Pomelo.EntityFrameworkCore.MySql
semble être recommandé par ms, a plus de téléchargements que oracle et SapientGuardian, a également plus d'git étoiles et plus fréquemment téléchargésJe rencontre le même problème, OP contexte pourrait être légèrement différente, mais voici ma réponse pour souci d'exhaustivité.
L'une des façons que vous pouvez rencontrer ce problème si:
Dans ce cas, vous obtenez le message d'erreur signalé par les OP
La solution dans ce cas, est de supprimer la base de données complète. Après que la mise à jour-databse commande s'exécute sucessfuly.
Je ne suis pas sûr si son liés à mysql seulement, mais de reprendre :
create
, et il fonctionne très bien!Eu le même problème avec officiel Oracle MySQL fournisseur.
Juste ajouté du package: Install-Package SapientGuardian.EntityFrameworkCore.MySql
et de la migration travaillé !