2016-07-13 7 views
1

Ich versuche, Dapper mit MySQL in .net Core 1.0 zu verwenden. Ich verwende diesen mysql-Konnektor: https://github.com/bgrainger/MySqlConnectorErhalten "Zugriff verweigert für Benutzer ..." jeden zweiten Treffer

Ich weiß, der Stecker ist in Alpha, aber ich frage mich, ob jemand ein ähnliches Problem hatte, wenn es zusammen mit Dapper verwendet.

Das ist mein einfaches Modell:

 public List<GeneralModel> GetAllLists() 
     { 
      try 
      { 
       using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;")) 
       { 
        return connection.Query<GeneralModel>("SELECT * FROM lists.general").ToList(); 
       } 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 

Und dies ist der Controller:

public IActionResult Index() 
    { 
     GeneralModel GenRepo = new GeneralModel(); 
     return View(GenRepo.GetAllLists()); 
    } 

Wenn ich auf die Indexseite zum ersten Mal gehen, es funktioniert. Wenn ich aktualisiere, bekomme ich einen "Zugriff verweigert für Benutzer ...". Ich habe keine Ahnung, was den Fehler verursachen könnte. Ich glaube nicht, dass das Problem in meinem Code liegt.

Edit:

Ich denke, das Problem in den Stecker, da dies auch den Fehler nach einer Aktualisierung zurück:

  List<GeneralModel> lists = new List<GeneralModel>(); 
      using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;")) 
      { 
       using (DbCommand myCommand = connection.CreateCommand()) 
       { 
        myCommand.CommandText = "SELECT * FROM lists.general"; 

        connection.Open(); 
        using (DbDataReader myReader = myCommand.ExecuteReader()) 
        { 
         while (myReader.Read()) 
         { 
          GeneralModel tmpGen = new GeneralModel(); 
          tmpGen.name = myReader["name"].ToString(); 
          tmpGen.description = myReader["description"].ToString(); 
          tmpGen.language = myReader["language "].ToString(); 

          lists.Add(tmpGen); 
         } 
        } 
        connection.Close(); 
       } 
      } 
      return lists; 
+3

Randbemerkung: Es macht keinen Sinn, einen 'catch' zu machen, der einfach erneut wirft (' throw'); Aber zurück zum Hauptpunkt: Wow, ich bin erstaunt, dass sich das merkwürdig verhält - ich bin angenehm überrascht, die richtige Verwendung von 'using' usw. zu sehen, und da ist nichts drin, was merkwürdig aussieht. Das klingt vielleicht ein wenig nach Fingerzeig, aber ich frage mich, ob das eigentliche Problem hier im mysql-Provider liegt. Gibt es irgendeinen Weg, wie du es in ADO.NET (Old-School-Stil) mit der gleichen Sache versuchen könntest, um zu sehen, ob es noch funktioniert? - Endgültiger Bonuspunkt: Versuchen Sie '.AsList()' anstelle von '.ToList()' zu verwenden - wenn die Eingabe bereits gepuffert ist, ist sie etwas billiger. –

+0

@MarcGravell Danke für die Tipps! Es sieht so aus, als wäre das Problem im Provider. Schade, weil ich wirklich versuchen wollte .net-Core, aber ohne MySQL-Unterstützung, es ist ein Nein, da dies der einzige mysql-Provider für .net-Core 1.0 ist, soweit ich weiß. – Cornwell

+1

Ein Teil von mir ist sehr erleichtert, dass es nicht meine Schuld war; Ein anderer Teil von mir teilt deine Frustration. Sie sollten dies als einen Bericht zurückgeben, aber die URL schlägt vor, dies ist nicht der offizielle Zweig, also weiß ich nicht, wie viel Zeit es bekommen wird (könnte sofort behoben werden, könnte nie behoben werden) –

Antwort

1

Dieser Fehler durch MySqlConnector nicht korrekt verursacht wurde für ein den schnellen Weg der Handhabung COM_CHANGE_USER packet.

Der MySQL-Server (Versionen 5.6 und 5.7) scheint die Anmeldeinformationen des Benutzers nicht sofort zu akzeptieren, gibt jedoch immer eine Authentication Method Switch Request Packet zurück. MariaDB (das Sie verwenden) implementiert den schnellen Pfad und gibt sofort ein OK-Paket zurück.

Der Connector wurde jetzt aktualisiert, um diese Antwort zu verarbeiten und sollte aufhören, die falschen "Zugriff verweigert" -Ausnahmen zu werfen. Die fix ist in 0.1.0-alpha09.

Verwandte Themen