wake-up-neo.net

MySQL und MVC Entity Framework in VS 2017 funktionieren nicht

Ich versuche, ein MVC EF Visual Studio 2017-Projekt zu starten. Ich habe meine Datenverbindung mit MySQL auf meiner lokalen Instanz eingerichtet, aber wenn ich ein ADO.net-Datenmodell erstelle, wird der im Bild gezeigte Fehler angezeigt:

 enter image description here

Es gab hier einen anderen Artikel: Kann keine MySQL-Verbindung für Entity Framework 6 verwenden der VS 2012 und 2013, aber nicht 2017 abdeckte. Hier ist die MySQL-Dokumentation, die besagt, welche Versionen mit 2017 funktionieren: https: // dev.mysql.com/doc/visual-studio/en/visual-studio-install.html

Ich benutze:

MySQL Connector Net 6.9.9 | MySQL für Visual Studio 1.2.7 | MySQL Server 5.7

MySQL.Data 6.9.9 | MySQL.Data.Entity 6.9.9 | Entity Framework 6.1.3

Alle von ihnen werden von MySQL als getestet und funktionsfähig aufgeführt. Ich habe heute einfach alles neu installiert, damit es keine ausstehenden alten Versionen gibt. Ich dreifach überprüft;)

Verbindungszeichenfolge:

<connectionStrings> <add name="MySQL" connectionString="server=localhost;port=3306;user id=root;password=password;database=localdb" providerName="MySql.Data.MySqlClient" /> </connectionStrings>


Bearbeiten

Ich habe diesen Artikel gefunden https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html der über das Einrichten der Verbindung spricht, aber jetzt anstelle dieses Fehlers den Dialog Die Box verschwindet, sobald ich auf "Weiter" drücke.


Mache ich das nur falsch oder ist der MySQL-Konnektor defekt?

Vielen Dank im Voraus für jeden Rat!

4
Alex

Ich musste MySQL für Visual Studio 2.0.5 neu installieren und MySQL Connector 6.9.9 vollständig entfernen und installieren. Scheint, die Reihenfolge spielt eine Rolle. Danach entferne ich diese Pakete vollständig und installiere sie in genau dieser Reihenfolge neu:

(Visual Studio danach neu starten)

EntityFramework 6.1.3 (I tried earlier versions and they don't work, so beware)
Mysql.Data 6.9.9
Mysql.Data.Entity 6.9.9 (NOT Mysql.Data.Entities!!! [for 6.9.9])
Mysql.Web 6.9.9

Stellen Sie dann sicher, dass sich Folgendes in Ihrer web.config-Datei befindet:

(wird nach der Bearbeitung neu gestartet)

<entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
    </providers>
  </entityFramework>

(Möglicherweise müssen Sie einen vorhandenen Abschnitt auskommentieren und durch diesen ersetzen.)

Der letzte Schritt, an den ich mich erinnern musste, war hier . Diesen Teil habe ich vergessen (zu lange), was den Fehler im Screenshot in der Frage verursacht hat.

Ein letztes Problem ist, dass möglicherweise falsche Versionen auf den Computer kopiert wurden, auf dem Visual Studio installiert ist. zum Beispiel:

C:\Program Files (x86)\Microsoft Visual Studio\ {Year} \ {Community | Enterprise | Professional} \Common7\IDE\PrivateAssemblies

oder

C:\Program Files (x86)\Microsoft Visual Studio {Ihre Versionsnummer} \Common7\IDE\PrivateAssemblies

MySql.Data.dll

MySql.Data.Entity.EF6.dll

MySql.Web.dll

(muss möglicherweise erst Visual Studio schließen)

Sie können jede Datei auswählen und in den Dateieigenschaften auf der Registerkarte Details nachsehen, welche Versionen Sie haben.

Holen Sie sich die neuen Dateien von hier (oder wo auch immer Sie sie installiert haben): C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5 (dies setzt voraus, dass Connector v6.9.9 Framework v4.5 verwendet [siehe Application->Target Framework Ihrer Projekteigenschaften, um Ihre Einstellung zu bestätigen]).

Hinweis 1: Wenn Sie MySQL für Visual Studio installieren, werden die Dateien im Ordner PrivateAssemblies aktualisiert (siehe die oben genannten Visual Studio-Pfade). Überprüfen Sie daher die oben genannten Assemblys, um sicherzustellen, dass sie nur auf Ihr Ziel geändert wurden Version (6.9.9 in diesem Fall). Unabhängig davon, was NuGet installiert, kümmert sich Visual Studio nicht einmal darum und sucht in den privaten Assemblys (ich denke eigentlich beim Start).

Hinweis 2: Wenn Sie den Fehler "IsPrimaryKey" erhalten, siehe hier .

Meine fertige App.Config, die als Referenz dient (zum Vergleich mit Ihrer):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>
  <connectionStrings>
    <!-- Connections Strings Go Here -->
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
2
James Wilkins

Schließlich habe ich ein neues Projekt erstellt und eine Neuinstallation von MySQL.Data 6.9.9 | durchgeführt MySQL.Data.Entity 6.9.9 | Entity Framework 6.1.3 und versuchte dann, das Datenmodell erneut zu erstellen.

Es hat fast geklappt! Ich habe folgende Fehlermeldung erhalten: 'System.Data.StrongTypingException: The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull. ---> System.InvalidCastException: Specified cast is not valid. Aber viele Leute haben dieses Problem behoben, indem sie in die MySQL-Befehlszeile gegangen sind und Folgendes ausgeführt haben: set global optimizer_switch='derived_merge=off' Diesen Fehler finden Sie hier: https://bugs.mysql.com/bug.php? id = 79163

Aus welchem ​​Grund auch immer das funktioniert. Hier ist die Ausgabe meiner Kommandozeile, um Neulingen bei MySQL zu helfen:

 enter image description here

Das behebt ALLES! hoffentlich findet jemand das und verschwendet nicht so viel Zeit wie ich.

2
Alex

@ James Wilkins Vielen Dank für die ausführliche Antwort, die ich hinzufügen muss. Wenn Sie Mysql.data oder MySQL.data.entity hinzufügen, stimmt die Assembly-Version nicht mit den von MySqlConnector/Net installierten Assemblys überein, da wir häufig die neuesten herunterladen Version von Nuget, dieses Problem erneut verursachen, also was ich getan und das Problem behoben habe, kopierte ich die DLL (Mysql.data, MySQL.data.entity und Web) aus

C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.9\Assemblies\v4.5

in meinen Ordner "application bin/debug" kopieren und auf diese verweisen, anstatt sie von Nugets herunterzuladen. Dies hat meine Probleme behoben. Möglicherweise müssen Sie auch die Assembly-Version in der Datei app.config oder web.config und packages.config aktualisieren.

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> 

Zu

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">

Und aktualisieren Sie die Version für die Einträge hier in packages.config

  <package id="MySql.Data" version="6.9.9" targetFramework="net452" />
  <package id="MySql.Data.Entity" version="6.9.9" targetFramework="net452" />
  <package id="MySql.Web" version="6.9.9" targetFramework="net452" />
0
Saeed Iqbal

Wenn ich mich einschalte, um zu bestätigen, dass alles funktioniert, einschließlich der db-first gui-toolchain von Entity Framework in VS2017, auf einer .net 4.7.1 asp.net-mvc5 wev-Lösung, indem ich genau diese Komponenten in Visual Studio 2017 verwende (VS2017 => Version 15.5.7, die zum Zeitpunkt des Schreibens auch als vollständig aktualisiertes VS2017 bezeichnet wurde):

Entity Framework ver6.2.0 [nuget]
MySql.Data ver6.9.11 [nuget]
MySql.Data.Entity ver6.9.11 [nuget]
MySql.Web ver6.9.11 [nuget]
MySQL for Visual Studio ver2.0.5 [system-wide msi installer]
MySql-Connector ver6.9.11 [system-wide msi installer]

Ich habe versucht, den neuesten MySql-Connector (Version 6.10.x) zu verwenden, aber es stellte sich heraus, dass die GUI-Tools von VS2017 für den db-first-Ansatz überhaupt nicht funktionieren. Ich denke, dass MySql-Connector mit dem Rest der DLLs versioniert werden muss.

Web.config sieht so aus:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    [...]
  </configSections>

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True;" />
      </parameters>
    </defaultConnectionFactory>
    [...]
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
      [...]
    </providers>
    [...]
  </entityFramework>
  [...]
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add description=".Net Framework Data Provider for MySQL" invariant="MySql.Data.MySqlClient" name="MySQL Data Provider" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    </DbProviderFactories>
  </system.data>
  [...]
</configuration>

Und die App.config des untergeordneten Projekts, das die EDMX-Datei hostet, sieht folgendermaßen aus:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false" />
    [...]
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
      [...]
    </providers>
  </entityFramework>
  [...]
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add description=".Net Framework Data Provider for MySQL" invariant="MySql.Data.MySqlClient" name="MySQL Data Provider" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    </DbProviderFactories>
  </system.data>
  [...]
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
  </startup>
</configuration>

Und die packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.2.0" targetFramework="net471" allowedVersions="[6.2.0]" />
  <package id="LinqKit" version="1.1.13" targetFramework="net471" allowedVersions="[1.1.13]" />
  <package id="MySql.Data" version="6.9.11" targetFramework="net471" allowedVersions="[6.9.11]" />
  <package id="MySql.Data.Entity" version="6.9.11" targetFramework="net471" allowedVersions="[6.9.11]" />
  <package id="MySql.Web" version="6.9.11" targetFramework="net471" allowedVersions="[6.9.11]" />
</packages>

Hinweis: Die Datei packages.config wurde absichtlich mit [allowedVersions] angepasst, um ein unbeabsichtigtes automatisches Upgraden von MySql-Paketen auf die neueren Versionen zu verhindern. Dies geschah aufgrund von Ausweichproblemen, die die 6.10.x-Varianten der MySql-Nugets plagen.

0
XDS