Mysql
 sql >> Baza danych >  >> RDS >> Mysql

EF:Nieprawidłowe użycie indeksu przestrzennego/pełnotekstowego/haszowania i wyraźnej kolejności indeksów

Rozwiązałem to.

W pliku migracji zastąp wpisy .Index poleceniami sql, jak poniżej

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

Dodaj odpowiednie polecenie SQL na dole metody Up() (dla każdego indeksu)

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

Problemy, które dodaję wtedy z DataReaderami, są związane z konektorem MySQL. Łącznik MySQL nie obsługuje wielu aktywnych połączeń. Aby sobie z tym poradzić, gdybyś miał to w swoim kontrolerze

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

Teraz powinno być

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

Jeśli nie wiesz, jak przekonwertować .Index() na polecenia SQL, po prostu

update-database -verbose

i wszystkie polecenia SQL pokażą




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL — użycie COUNT(*) w klauzuli WHERE

  2. Jak używać mysqldump do części tabeli?

  3. Przestań MySQL tolerować wiele wartości NULL w ograniczeniu UNIQUE

  4. Grupowe odcięcie wyników Concat

  5. Usuwanie zduplikowanych wierszy z tabeli