sql >> Base de Datos >  >> RDS >> Mysql

EF:uso incorrecto de índice espacial/texto completo/hash y orden de índice explícito

Resuelto.

En su archivo de migración, reemplace las entradas .Index por comandos sql como a continuación

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

Agregue el comando SQL correspondiente en la parte inferior de su método Up() (para cada índice)

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

Los problemas que agrego luego con DataReaders están relacionados con el conector MySQL. El conector MySQL no admite varias conexiones activas. Para manejar esto, si tuviera esto en su controlador

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

Ahora debería ser

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

Si no sabe cómo convertir su .Index() a comandos SQL, simplemente

update-database -verbose

y todos los comandos SQL se mostrarán