Sto cercando di ripristinare completamente le migrazioni di codice EF Core nel mio progetto. Ho una buona ragione per farlo (posso spiegare se necessario), ma sto avendo difficoltà a farlo funzionare.
Ho abbandonato il database precedente e cancellato la vecchia directory di migrazione nel mio progetto.
Vedi sotto il registro. A circa tre quarti del percorso, vedi che EF ritiene che il database sia già aggiornato. Tuttavia, vedi che ha creato un nuovo database all'inizio? Nota: ho troncato molto alla fine del log in quanto è solo errori di traccia dello stack perché non è stato possibile trovare la tabella che pensava che avrebbe dovuto già esistere.
Qualche guida su come ricreare una nuova migrazione iniziale e aggiornare il database?
PM> Add-Migration InitialCreate
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
User profile is available. Using 'C:\Users\CollinB\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.0.1-rtm-125 initialized 'FilterListsDbContext' using provider 'Pomelo.EntityFrameworkCore.MySql' with options: MaxPoolSize=128 MigrationsAssembly=FilterLists.Api
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE DATABASE `filterlistsdata`;
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (33ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `__EFMigrationsHistory` (
`MigrationId` varchar(95) NOT NULL,
`ProductVersion` varchar(32) NOT NULL,
CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`)
);
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (18ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='filterlistsdata' AND TABLE_NAME='__EFMigrationsHistory';
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT `MigrationId`, `ProductVersion`
FROM `__EFMigrationsHistory`
ORDER BY `MigrationId`;
Microsoft.EntityFrameworkCore.Migrations[20405]
**No migrations were applied. The database is already up to date.**
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
Failed executing DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM `languages` AS `l`)
THEN TRUE ELSE FALSE
END
MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'filterlistsdata.languages' doesn't exist ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'filterlistsdata.languages' doesn't exist
L'avevo capito. Non mi sono reso conto che l'applicazione viene effettivamente eseguita quando eseguo l'add-migration iniziale. Stava eseguendo parte del mio codice sorgente che stava causando il fallimento. Commentarlo temporaneamente mi ha permesso di avviare la mia creazione iniziale.
Non eliminare mai manualmente una cartella Migrations. Ti farà risparmiare un sacco di mal di testa; usi il code-first per creare il tuo database, quindi usa il code-first per eliminarlo.
Per prima cosa, chiudi lo studio visivo e riaprilo. Quindi prova a eseguire nuovamente la migrazione.
se ciò non funziona, la cosa più semplice da fare a questo punto, sarebbe andare su appsettings.json e cambiare il nome del tuo database. Quindi eseguire di nuovo add-migration e aggiornare il database.