Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

EF:uso incorreto de índice espacial/texto completo/hash e ordem de índice explícita


Resolvi-o.

Em seu arquivo de migração, substitua as entradas .Index por comandos sql como abaixo
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

Adicione o comando SQL correspondente na parte inferior do seu método Up() (para cada índice)
Sql("CREATE index `IX_userId` on `Articles` (`userId` DESC)");

Os problemas que eu adiciono com DataReaders são relacionados ao conector MySQL. O conector MySQL não oferece suporte a várias conexões ativas. Para lidar com isso, se você tivesse isso em seu controlador
public IEnumerable<Article> GetArticles()
{
    return db.Articles;
}

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

Se você não sabe como converter seu .Index() para comandos SQL, apenas
update-database -verbose

e todos os comandos SQL mostrarão