Die Anzahl der übergebenen Primärschlüsselwerte muss der Anzahl der für die Entität definierten Primärschlüsselwerte entsprechen

8

Ich habe eine Sicht in SQL Server erstellt, die die wichtigsten Spalten aus verschiedenen Tabellen enthält. Das Drucken des Inhalts der Tabelle in der Asp.net-MVC-Ansicht funktioniert gut, aber wenn ich die Details eines einzelnen Datensatzes abrufen möchte, tritt das Problem auf.

  

Die Anzahl der übergebenen Primärschlüsselwerte muss der Anzahl der für die Entität definierten Primärschlüsselwerte entsprechen.

Ich navigiere zu dem entsprechenden Datensatz:

%Vor%

Datensatznummer ist der Primärschlüssel. Ich setze das manuell, indem ich mit der rechten Maustaste auf die spezifische Variable im .edmx -Modell klicke. Dann versuche ich, die spezifischen Daten zu erhalten, indem ich Folgendes benutze:

%Vor%

Und das Modell sieht so aus:

%Vor%

Im Moment benutze ich den folgenden Code, damit alles funktioniert. Aber ich denke nicht, dass dies ein sehr guter Weg oder effizient ist. Und ich bin sehr gespannt, wie ich den Fehler oben beheben kann!

%Vor%

Jemand hat eine Idee, warum dieser Fehler auftritt? Danke für die Hilfe!

    
Curiosity_is_Learning 26.11.2014, 13:32
quelle

2 Antworten

18

Wenn Sie Ihren Primärschlüssel in .edmx setzen, sollten Sie auch Ihre Datenbank aktualisieren, da Sie PK in Ihrem Modell und nicht in Ihrer Datenbank haben. Aktualisierung: funktioniert nicht für Ansichten.

Verwenden Sie für Ansichten .SingleOrDefault anstelle von Find() .

Ändern Sie in diesem Szenario die folgende Zeile: RecordDataView record = db.RecordDataView.Find(id); Zu den folgenden: RecordDataView recorddataview = db.RecordDataView.SingleOrDefault(m => m.Record_number == id);

    
Marcin 26.11.2014, 13:52
quelle
0

Wenn Ihre Datenbanktabelle kein Primärschlüsselfeld angibt, wird Ihr edmx-Modell davon ausgehen, dass jedes Feld ein Schlüssel ist. Stellen Sie also sicher, dass Ihre Datenbank und Ihr Entitätsmodell dasselbe sagen.

Wenn Ihr Modell und Ihre Datenbank den Primärschlüssel richtig angeben, können Sie .Find () verwenden und es wird funktionieren.

    
Seun S. Lawal 22.08.2016 15:36
quelle