Mysql
 sql >> Base de données >  >> RDS >> Mysql

EF :utilisation incorrecte de l'index spatial/fulltext/hash et de l'ordre d'index explicite

Résolu.

Dans votre fichier de migration, remplacez les entrées .Index par des commandes sql comme ci-dessous

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

Ajoutez la commande SQL correspondante en bas de votre méthode Up() (pour chaque index)

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

Les problèmes que j'ajoute ensuite avec DataReaders sont liés au connecteur MySQL. Le connecteur MySQL ne prend pas en charge plusieurs connexions actives. Pour gérer cela, si vous aviez ceci dans votre manette

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

Maintenant ça devrait être

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

Si vous ne savez pas comment convertir votre .Index() en commandes SQL, juste

update-database -verbose

et toutes les commandes SQL s'afficheront