web-dev-qa-db-de.com

MySQL - Entity: Der Wert für die Spalte 'IsPrimaryKey' in der Tabelle 'TableDetails' ist DBNull

Ich benutze Visual Studio 2013 mit Entity Framework 5 und M ySQL Server 5.7.9 .

Beim Versuch, ein Modell aus der Datenbank zu erstellen (oder 'Modell aus Datenbank aktualisieren'), wird die folgende Meldung angezeigt:

'System.Data.StrongTypingException: Der Wert für die Spalte 'IsPrimaryKey' in der Tabelle 'TableDetails' ist DBNull. ---> System.InvalidCastException: Die angegebene Umwandlung ist nicht gültig.

Ich weiß, dass diese Frage schon einmal gestellt wurde, aber ich habe keine Lösung gefunden .. Außerdem kann ich nicht auf MySQL 5.6 herunterstufen.

Das Problem tritt auch bei einer einfachen Tabelle auf.

Die Beispieltabelle

CREATE TABLE new_table
(
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(45) NOT NULL,
  PRIMARY KEY (id)
) 
ENGINE = InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Wenn die Tabelle nur aus dem Primärschlüssel besteht, wird das Modell ordnungsgemäß erstellt.

EDIT: Wenn ich die beiden Primärschlüssel-Felder mache, wird das Modell fehlerfrei erstellt.

Hat jemand eine Idee dazu?

Mit freundlichen Grüßen.

Der vollständige Fehlerstack:

Das Modell kann aufgrund der folgenden Ausnahme nicht generiert werden: 'System.Data.StrongTypingException: Der Wert für die Spalte 'IsPrimaryKey' in der Tabelle 'TableDetails' ist DBNull. ---> System.InvalidCastException: Die angegebene Umwandlung ist nicht gültig. beim Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey () --- Ende des inneren Ausnahmestapel-Trace --- unter Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey () beim Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateProperties (IList1 columns, IList1-Fehler, List1& keyColumns, List1 & excludedColumns, List1& invalidKeyTypeColumns) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList1 .), Boolean & needsDefiningQuery) Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets (IEnumerable1 tableDetailsRows, EntityRegister entityRegister, IList1 EntitySetsForReadOnlyEntityTypes, DbObjectType objectType) um Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets (IEnumerable1 tableDetailsRowsForTables, IEnumerable1 tableDetailsRowsForViews, EntityRegister entityRegister) um Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.Build (StoreSchemaDetails StoreSchemaDetails) um Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.CreateStoreModel () beim Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.GenerateModel (Fehler List1 errors) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String storeModelNamespace, List1) um Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModel (EdmxHelper EdmxHelper) '. Das Laden von Metadaten aus der Datenbank dauerte 00: 00: 00.5856317.

53
magarisi

Entity Framework (Version 6.1.3) und MySQL Server (> = 5.7.6)

Eine Möglichkeit, das Problem zu lösen, ist

1. Open Services (services.msc) and restart MySQL57 service.
2. Execute the following commands in MySQL.
   use <<database name>>;
   set global optimizer_switch='derived_merge=OFF';
3. Update the .edmx.

Es ist eine späte Antwort. Aber hoffe, dass es jemandem helfen wird.

Vielen Dank.

166
Saravanan Sachi

Dies ist ein bekannter Fehler: http://bugs.mysql.com/bug.php?id=79163

Führen Sie den Befehl auf der mysql console aus:

set global optimizer_switch = 'abgeleitet_merge = aus'

OR

set @@ optimizer_switch = 'abgeleitet_merge = AUS' 

(dieser arbeitete für mich) 

Stellen Sie sicher, dass die Änderung mit diesem Befehl wirksam ist:

SELECT @@ optimizer_switch\G

https://dev.mysql.com/doc/refman/5.7/de/switchable-optimizations.html

23
martin

Jede Antwort oben funktioniert einwandfrei, aber wenn der Server oder der dev-Rechner neu gestartet wird, müssen wir alle Schritte immer wieder ausführen. Um die Lösung vollständig zu lösen, können Sie dieses Attribut in der mysql-Konfiguration mit 'derivative_merge = OFF' angeben OK, um dies zu tun, müssen Sie mit de MySQL Workbench auf Ihren MySQL-Server zugreifen und "Optionsdatei" öffnen> Registerkarte "Leistung auswählen". Suchen Sie in der Optimizer-Gruppe nach "optimizer_switch", aktivieren Sie das Kontrollkästchen, um ein Feld zu aktivieren, und setzen Sie "Abgelegte_Eigenschaft = AUS" . Starten Sie Ihren Server neu in "services.msc" und "voilá"!

10
Kolodziey

Die folgende SQL hat für mich gearbeitet:

use adventureworks;
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';

select @@optimizer_switch;
select @@GLOBAL.optimizer_switch;

Meine MySQL-Version ist 5.7.15 und ich habe die Option "EF Designer From Database" von Visual Studio 2015 verwendet.

Ich hoffe es hilft anderen :)

6
Recev Yildiz

Die Problemumgehung SET GLOBAL optimizer_switch = 'abgeleitet_merge = aus';

5
caras

Der Wert für die Spalte 'IsPrimaryKey' in der Tabelle 'TableDetails' lautet DBNull

Dies geschieht, wenn Sie versuchen, MySql mit Entity Framework zu verwenden.

Ich habe diesen Weg gelöst:

Öffnen Sie den MySQL 5.7 Command Line Client, geben Sie Ihr Kennwort ein, drücken Sie die Eingabetaste, und geben Sie Folgendes ein:

set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';

select @@optimizer_switch;
select @@GLOBAL.optimizer_switch;

Starten Sie Visual Studio neu. Sie können loslegen. Ich habe es mit VS 2013 und VS 2017 ausprobiert und in beiden gearbeitet!

3
FelipeFalanque

Führen Sie dieses Skript aus. Es hat für mich perfekt funktioniert, während Sie das MySql.Data.Entity-Nugget-Paket verwenden

use YourDB;
   set global optimizer_switch='derived_merge=OFF';
2
Frank Odoom

Wir haben denselben Fehler festgestellt ... Aber ich denke, das ist das Serverproblem von MySQL.

status:

  • EF5
  • MySQL VS Tools 1.2.5
  • VS Community 2015
  • C #
  • aus der Datenbank EF Designer erstellen (Ich verwende die japanische Version, also ist der Menüname mein Englisch ...)

ergebnis:

  • MySQL 5.7.9 => Fehler. 
  • MySQL 5.6.26 => kein Fehler.
1
modeverv

In meinem Fall:

Verwendete Module:

Entity Framework 6 MySql Data Connector 6.9.9 MySQL VS Tools 1.2.6 EF6 Tools für VS2015

Ich muss dies tun => SET GLOBAL optimizer_switch = 'abgeleitete_merge = aus'; Aber wenn mit "root" Benutzer angemeldet wird, wird der Fehler weiterhin angezeigt. Wenn Sie sich bei einem "normalen" Benutzer anmelden, erstellen Sie das Modell OK.

1
Maxi

Ab heute ist dies ein verifizierter MySql Community Server 5.7.9 - Fehler mit der ID 79163 .

Als Workaround habe ich die Anwendung umgeformt, um die Code First -Praxis zu verwenden

(ADO.NET-Objektobjekt -> Erstes Modell mit leerem Code)

und fügte manuell alle Objekte und ihre Eigenschaften hinzu.

Verwendete Module:

  • Entity Framework 6 
  • MySql Data Connector 6.8.9 
  • MySQL VS Tools 1.2.5
  • EF6-Tools für VS2013
0
magarisi

ich habe eine gute Lösung für diese Art von Fehler gefunden. 

1. Lösung (Datenbank zuerst) Anstatt das vorhandene Modell in der .edmx-Datei zu aktualisieren, klicken Sie mit der rechten Maustaste auf eine der Entitäten in edmx und wählen Sie -> Wechseln Sie in den Modellbrowser (ein neues Register wird angezeigt Wählen Sie nun die Entität aus, die Sie aktualisieren möchten, klicken Sie mit der rechten Maustaste und führen Sie die Aktualisierung durch. In meinem Fall hat es jedes Mal funktioniert, ohne dass in mysql etwas ausgeschaltet werden muss. Es kann jedoch vorkommen, dass Sie einige Beziehungen manuell ändern müssen. Wenn hier etwas nicht stimmt (in meinem Fall gibt es keine Probleme mit non-fk/pk-Schlüsseln. Wenn Sie eine fk löschen und versuchen, alle Relationsships selbst zu ordnen, könnte Ihre Datenbank gelöscht werden. Dies geschieht jedoch nicht, wenn Sie nur aktualisieren Keine Primär-/Fremdschlüsselattribute oder nur das Hinzufügen einer neuen Tabelle.

EDIT: Diese Lösung eignet sich hervorragend zum Löschen, Aktualisieren und Hinzufügen neuer Beziehungen. Dies führt zu Problemen, wenn Updates für fk/pk-Attribute durchgeführt werden!

Wenn Ihre Tabelle gelöscht wurde, erstellen Sie einfach eine neue mit denselben Einstellungen.

2. Lösung (Datenbank zuerst, wenn PK/FK-Schlüssel aktualisiert werden müssen) Die Tabelle löschen und eine neue erstellen. Dies dauert insgesamt 3 Minuten

Ich hoffe, ich konnte ein wenig helfen, dieser Fehler hat mich die letzten 2 Wochen verrückt gemacht!

p.s. Ich habe diese Art von Fehler nie erlebt, bis ich überschrieben habe! ein Fremdschlüssel in einer vorhandenen Beziehung in MySQL. Dann habe ich versucht, die Beziehung mit dem Entity Framework (Datenbank zuerst) zu aktualisieren und seitdem ist der dbNullBug aufgetaucht. Ich konnte meine Entitäten manuell verwalten, indem ich vorhandene Attribute hinzufügte und entfernte, aber das war sehr anstrengend. Die Lösung 1 funktioniert gut für mich, und wenn ich den Fremdschlüssel aktualisieren muss, lasse ich einfach das vorhandene Modell fallen und erstelle ein neues. 

0
I_zaski08