2015-09-25 7 views
5

OK, ich bin total ratlos. Ich habe vielleicht nicht genug Informationen, um hier zu posten, aber ich weiß nicht einmal, wo ich anfangen soll. Ich versuche, "Modell von Datenbank aktualisieren" auf meiner DAL.edmx-Datei. Ich habe ein Feld zu einer Ansicht hinzugefügt, die vorher nicht enthalten war. Ich habe versucht, das Programm zu aktualisieren, und dann habe ich versucht, die Ansicht in der Datenbank umzubenennen und die Ansicht von der DAL zu löschen, damit ich sie wieder hinzufügen kann. Beide Male habe ichFehler beim Ändern von DAL, System.ArgumentException, "Ein Eintrag mit demselben Schlüssel ist bereits vorhanden"

enter image description here

Als nächstes ohne Grund Ich habe versucht, meine umbenannt Blick in die DAL das Hinzufügen, bekam gleiche Ausnahme. Das manuelle Löschen von DAL.tt hilft nicht. Google-Problem und nur 2 nicht relevante Ergebnisse. Ich weiß nicht, wo ich überhaupt anfangen soll.

Ich habe es nicht geschrieben, aber hier ist die Quelle sql der Ansicht (wenn es hilft). Die Tatsache, dass EF die umbenannte Ansicht nicht hinzufügen würde, deutet darauf hin, dass es sich um SQL handelt. Das SQL läuft in Mngmnt Studio einwandfrei.

SELECT  ID, IssueID, IssueTypeID, IssueText, IssueCreateDate, WeekendDate, CustomerName, Employee, 
        CONVERT(DECIMAL(6, 2), AdjustedTotalRHours, 101) AS AdjustedTotalRHours, AdjustedTotalOHours, 
        AdjustedTotalRHours + AdjustedTotalOHours AS Hours, InvoiceNumber, AdjustedInvoiceAmount, 
        COALESCE 
         ((SELECT  SUM(InvoiceAmount) AS Expr1 
          FROM   TrendingDataFinal AS I1 
          WHERE  (InvoiceNumber = T1.InvoiceNumber) AND (CompanyID = T1.CompanyID) AND 
               (CalType = 'F') AND (Aident = T1.Aident)), 0) AS TotalInvoiceAmount, InvoiceDate, 
        ROUND(DATEDIFF(DAY, InvoiceDate, GETDATE()), 0) AS DaysOutstanding, Notes, Aident, EINC, IsClosed, 
        CompanyID, 
         (SELECT  COUNT(ne.EntryID) AS Expr1 
         FROM   Madison.Notes.Note AS n INNER JOIN 
               Madison.Notes.NoteEntry AS ne ON n.NoteID = ne.NoteId 
         WHERE  (n.Key1 = T1.InvoiceNumber)) AS HasNotes, COALESCE 
         ((SELECT  TOP (1) CompanyName 
          FROM   ReportingCompanies AS I1 
          WHERE  (CompanyId = T1.CompanyID)), '') AS CompanyName, BranchName, PayStatus 
FROM   BillMan_ReportStage AS T1 

Irgendwelche Vorschläge würden geschätzt.

UPDATE: Erstellt Brand Spanking neue Ansicht mit der gleichen SQL, ging es um die gleiche Methode zu DAL hinzufügen, gleichen Fehler.

Antwort

0

Ich weiß nicht, ob das helfen wird, weil ich nicht genug weiß, um es zu verstehen, aber ich habe zufällig gesehen, dass die Teilklasse vw_BillingIssues.cs tatsächlich das zusätzliche Feld darin hatte. Ich habe eine lösungsweite Suche nach dem Begriff "vw_BillingIssues" durchgeführt und das zusätzliche Feld zu jeder Liste oder Sammlung hinzugefügt, die es vermisste (so ziemlich überall sonst), die Lösung neu aufgebaut und Erfolg! Ich habe bemerkt, dass irgendwo erwähnt wurde, dass die zugrunde liegenden Tabellen der Ansicht keinen Primärschlüssel definiert haben, aber erinnere dich nicht, wo ich das gesehen habe.

2

Sie haben wahrscheinlich zwei identische Knoten: EntitySetMapping. Sie sollten einen entfernen und alles wird in Ordnung sein. Versuchen Sie, alle Zuordnungen für die Ansicht zu entfernen, und fügen Sie sie erneut hinzu. Wenn dies nicht funktioniert, versuchen Sie, in der Model Browser Ansicht und unter Model/Entity Types nachzusehen. Es könnte einige Entitäten geben, die während der alten Migration verblieben sind, und wenn Sie versuchen, eine Tabelle mit demselben Schlüssel hinzuzufügen, tritt der Fehler auf. Hoffe, das hilft;]

+0

Danke für die Antwort, aber dieses Ding ist riesig und wurde viele viele Jahre von vielen vielen Entwicklern bearbeitet. Ich würde nicht darauf vertrauen, dass da etwas nicht drinsteckt. Diese eine Tabelle & View, sind jedoch nur da, um eine Gridview auf 1 Seite zu unterstützen, nichts anderes berührt sie. Ich werde es weiter versuchen – Darkloki

+0

Überprüfen Sie meine Bearbeitung;] – dlght

9

Ich hatte genau das gleiche Problem. Wie ich bemerkte, tauchte das Problem nach dem Zusammenführen von EDMX-Dateien mit Subversion auf. Als ich auf die EDMX-Datei im Texteditor schaute, fand ich einen doppelten EntitySetMapping-Eintrag. Nach dem manuellen Löschen des Duplikats wurde das Problem behoben! Hoffe, das hilft

1

Ich hatte genau das gleiche Problem und fand den Hinweis auf die Lösung in cedenbal Antwort oben - doppelte EntitySetMapping Einträge. Problem war: wie man es in einem EDMX von fast 3Mb mit mehr als 250 Tabellen findet. Die Lösung bestand darin, (a) in Visual Studio auf "EntitySetMapping Name =" für Dateien vom Typ EDMX ein "Find All" auszuführen. Dies ergab eine Liste von 250+ Einträgen (wie erwartet), aber nicht in irgendeiner Reihenfolge, in der ich Duplikate entdecken konnte. Also (b) Ausschneiden und Einfügen der Liste in Notepad ++, Ausführen eines Makros, um die Spreu zu entfernen, so dass nur die Tabellennamen übrig blieben, (c) Ausschneiden und Einfügen dieser Liste in Excel und Sortieren von A-Z. Dann (d) beäugte die Liste nur nach Duplikaten. Gefunden einen ganzen Abschnitt mit 8 doppelten ESMs! Entfernte sie, speicherte das EDMX, lud das EDMX in Visual Studio neu, führte "Update von der Datenbank" und Bingo erneut aus.