Problema
Quando si esegue una migrazione su un database MySQL appena installato (che funziona bene contro un database SQL Server), non riesce sulla prima tabella di creazione con l'errore:
Uso errato di indice spaziale / fulltext / hash e ordine indice esplicito
Ciò accade quando tenta di eseguire il seguente metodo Index
:
CreateTable(
"dbo.AuditLog",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(maxLength: 1000, unicode: false),
What = c.String(maxLength: 1000, unicode: false),
When = c.DateTime(nullable: false, precision: 6),
Why = c.String(maxLength: 1000, unicode: false),
Where = c.Int(nullable: false),
Who_Id = c.String(maxLength: 128, unicode: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.AspNetUsers", t => t.Who_Id);
.Index(t => t.Who_Id);
Dopo aver usato il flag -verbose
su Update-Database
, vedo che il comando che causa questo errore è il seguente.
CREATE index `IX_Who_Id` on `AuditLog` (`Who_Id` DESC) using HASH
La ricerca online non è stata molto utile per risolvere questo problema. Il più vicino che ho visto è questa domanda Stack Overflow ma non ha funzionato per me.
sfondo
Eseguire la migrazione su un database MySQL vecchio (~ 3 anni fa) funziona bene, ma quando ho installato il nuovo MySQL ho avuto degli errori sull'autenticazione della password, che sarebbero stati risolti aggiornando i pacchetti MySQL NuGet o imporre che gli utenti usassero un'eredità parola d'ordine. Vedi qui per questo problema.
Ho aggiornato i miei pacchetti MySQL NuGet alla versione più recente e questo ha causato un errore diverso (può essere visto qui ) che ho risolto eseguendo il downgrade a un pacchetto più recente rispetto a quello con cui ho iniziato, ma inferiore all'ultimo dato che le persone avevano menzionato che le API non erano funziona correttamente.
Quindi in questa fase si connette bene, ma sembra che il database stesso non ami il comando index che Entity Framework sta generando.
Sono felice di fornire ulteriori informazioni se necessario.
versioni
Aggiornare
Sono riuscito a farlo funzionare su MySql manualmente eseguendo il comando SQL e sostituendo la chiamata .Index()
durante il targeting delle istanze MySql.
Tuttavia, anche dopo aver eseguito le migrazioni apparentemente con successo, MySql.Data (.Entity) continuava a dare errori di runtime.
Quando si ripristina il DB alla precedente versione principale di MySql 5, il codice funziona perfettamente senza alcuna necessità di modifica.
Aspetterò un po 'di tempo prima che i pacchetti NuGet e il database MySql si aggiornino prima di dare un altro risultato.
vedi questa risposta
su questo io creo una classe eredita, sovrascrivo una funzione e setto la mia classe personalizzata su configuration.cs