Mysql
 sql >> Database >  >> RDS >> Mysql

EF:utilizzo errato dell'indice spaziale/fulltext/hash e dell'ordine esplicito dell'indice

Risolto.

Nel tuo file di migrazione, sostituisci le voci .Index con i comandi sql come di seguito

CreateTable(
        "dbo.Articles",
        c => new
            {
                articleId = c.Int(nullable: false, identity: true),
                title = c.String(nullable: false, unicode: false),
                digest = c.String(unicode: false),
                content = c.String(nullable: false, unicode: false),
                imgLink = c.String(nullable: false, unicode: false),
                releaseDate = c.DateTime(precision: 0),
                userId = c.Int(nullable: false),
            })
        .PrimaryKey(t => t.articleId)
        .ForeignKey("dbo.Users", t => t.userId, cascadeDelete: true)
        .Index(t => t.userId); // REMOVE THIS

Aggiungi il comando SQL corrispondente nella parte inferiore del tuo metodo Up() (per ogni indice)

Sql("CREATE index `IX_userId` on `Articles` (`userId` DESC)");

I problemi che aggiungo quindi con DataReader sono correlati al connettore MySQL. Il connettore MySQL non supporta più connessioni attive. Per gestirlo, se lo avessi nel controller

public IEnumerable<Article> GetArticles()
{
    return db.Articles;
}

Ora dovrebbe essere

public IEnumerable<Article> GetArticles()
{
    return db.Articles.ToList(); // ToList() will manage the request to work with only ONE data reader, 
}

Se non sai come convertire i tuoi comandi .Index() in SQL, basta

update-database -verbose

e tutti i comandi SQL verranno visualizzati