ADO.NET Entity Framework: Der Update-Assistent fügt keine Tabellen hinzu


92

Ich habe meinem Projekt ein neues ADO.Net-Entitätsdatenmodell hinzugefügt und mithilfe des Aktualisierungsassistenten Tabellen zum Modell hinzugefügt . Fünf der ausgewählten Tabellen wurden der Entwurfsoberfläche hinzugefügt. Zwei weitere Tabellen werden nicht hinzugefügt. Ich wähle sie im Assistenten aus und klicke auf Fertig stellen, aber sie werden nie auf der Entwurfsoberfläche angezeigt.

Ist dies ein Fehler oder gibt es Situationen, in denen dem Modell keine Tabelle hinzugefügt werden kann (beabsichtigt)?


UPDATE: Das XML (* .edmx) zeigt das Problem.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
Dies sollte viel mehr Abstimmungen haben. Ich hatte keine Ahnung, dass Visual Studio die Tabelle nicht hinzufügen konnte, da die .edmx-Datei der einzige Ort ist, an dem der Fehler tatsächlich auftritt. Hoffentlich haben sie ein Dialogfeld in v2!
John Bubriski

+1 - In meinem Fall gab es keine Fehlermeldung.
Teynon

Wie Sie bereits bemerkt haben, hatten die Tabellen, die nicht importiert werden konnten, keine Primärschlüssel. Fügen Sie eine PK hinzu und los geht's.
Eric

Antworten:


46

Die Entwurfsoberfläche unterscheidet sich vom Entitätsmodell. Es ist möglich, eine Tabelle in der Zuordnung in Ihrem EDMX zu haben, die nicht auf der Entwurfsoberfläche angezeigt wird. Zeigen Sie die Datei als XML an, um festzustellen, ob dies der Fall ist. In diesem Fall können Sie mit dem Aktualisierungsassistenten die Tabellen nicht erneut hinzufügen, da sie bereits Teil des Entitätsmodells sind. Im Allgemeinen weiß der Update-Assistent mehr über Ihr Entitätsmodell als über die Entwurfsoberfläche an sich .

Ich denke nicht, dass dies genau die Situation ist, in der Sie sich befinden, aber es sollte Ihnen die allgemeine Idee für die Lösung geben: Gehen Sie in das XML und suchen Sie nach Verweisen auf die fraglichen Tabellen.


4
Ich hatte gerade dieses Problem, ich habe eine Tabelle aus dem Modell gelöscht und als ich sie erneut hinzufügte, zeigte der visuelle Designer sie nicht als in der Datenbank vorhanden an. Um das zu umgehen, habe ich den Text aus der .edmx-Datei gelöscht, aber es geschafft, das XML durcheinander zu bringen. Wenn Sie dies tun, sichern Sie bitte zuerst die Datei, nur für den Fall. Zum Glück konnte ich das durcheinandergebrachte Tag mit git diff finden.
GrandMasterFlush

40

Setzen Sie Primärschlüssel auf alle Tabellen oder nur ein deaktiviertes Kontrollkästchen "Zulassen null" für eine Spalte jeder Tabelle. Für mich geht das :)


2
Ich glaube, das ist die richtige Antwort, zumindest für mich. Vielen Dank!
Eric

@Parvinder, ich habe mich in den meisten meiner Projekte um dieses Problem bemüht. Schließlich machte Ihre Antwort alles für mich klar. In meinem Fall habe ich in der Tabelle "In Joining" weder das Feld "Nicht null" noch nur den Primärschlüssel angegeben. Nachdem ich das behoben hatte, war ich beruhigt. Vielen Dank
PatsonLeaner

Was ich mit der Auflösung verstanden habe, ist, dass wir keine Tabelle zum Entitätsmodell hinzufügen können, wenn i) diese Tabelle keinen Primärschlüssel hat oder (ii) diese Tabelle keine Spalte "Null zulassen" enthält.
Murtuza Khan

10

1.Ändern Sie die Tabellenstruktur und fügen Sie eine Primärspalte hinzu. Aktualisieren Sie das Modell.

2. Ändern Sie die EDMX-Datei im XML-Editor und versuchen Sie, eine neue Spalte unter dem Tag für diese bestimmte Tabelle hinzuzufügen. (WIRD NICHT FUNKTIONIEREN)

3. Anstatt eine neue Primärspalte zum Beenden der Tabelle zu erstellen, erstelle ich einen zusammengesetzten Schlüssel, indem alle vorhandenen Spalten einbezogen werden. (ARBEITET)

Entity Framework: Hinzufügen von DataTable ohne Primärschlüssel zum Entity Model.


Ich bin auf dasselbe Problem gestoßen. Das Entitätsmodell fügte die Tabelle hinzu, wurde jedoch im Designer nicht angezeigt. Ich konnte auch nicht im Code darauf zugreifen. Ich habe ein ID-Feld hinzugefügt. Schlüssel ... hat funktioniert!
Ravi Ram

6

Ich hatte auch dieses Problem, all das hat bei mir nicht funktioniert. Was mir geholfen hat, war das Folgende.

Wenn Sie versuchen, eine Verbindung mit einer Datenbank herzustellen, kann diese Datenbank unterschiedliche Benutzer mit unterschiedlichen Anmeldeinformationen haben, die sie akzeptieren kann. Angenommen, Benutzer A bis D.

Wenn Sie versuchen, eine Verbindung mit einem Benutzer herzustellen, stellen Sie sicher, dass für den Benutzer die richtigen Anmeldeinformationen aktiviert sind. In diesem Fall sind die Lese- und Schreiboptionen aktiviert.

Starten Sie dazu MS SQL Server Managment Studio, das mit Ihrem SQL Server verbunden ist, und wählen Sie die Datenbank aus, mit der Sie in Visual Studio eine Verbindung herstellen möchten. Unter 'Ihr_Datenbankname' -> Sicherheit -> Benutzer finden Sie eine Liste der Benutzer. Klicken Sie mit der rechten Maustaste auf den Benutzernamen, mit dem Sie sich anmelden möchten, und wählen Sie Eigenschaften aus. Ein Fenster öffnet sich. Wählen Sie die Seite 'Allgemein' (standardmäßig ausgewählt) und stellen Sie unter der Registerkarte 'Mitgliedschaft in der Datenbankrolle' sicher, dass 'db_datareader' und 'db_datawrite' ausgewählt sind.

Hinweis: Wenn Sie sich auch bei MS SQL Server Managment Studio anmelden, stellen Sie sicher, dass Sie sich bei einem Benutzer anmelden, der diese Optionen aktivieren / deaktivieren kann ...


5

Suchen Sie in Ihrer Tabelle nach 'Nullen'. Wenn alle Spalten auf "Null zulassen" gesetzt sind, wird sie vom Entity Framework als "Null" -Tabelle betrachtet. Ich hatte das gleiche Problem und deaktivierte 'Allow Null' und fügte die erforderliche Tabelle hinzu.


1
Es funktioniert, dumm, es erscheint kein Fehler oder eine Warnung in den Protokollen!
RolandoCC



1

Dies wurde in der neuesten Version behoben (Umgebung: VS 2012, .net Framework 4.5). Öffnen Sie einfach die .edmx-Datei und fügen Sie die erforderlichen Tabellen / gespeicherten Prozeduren / Ansichten hinzu. Die Tabelle / Ansicht ohne Primärschlüssel wird als schreibgeschützte Tabelle / Ansicht erstellt.

In der Tabelle / Ansicht 'TABLE_NAME' ist kein Primärschlüssel definiert. Der Schlüssel wurde abgeleitet und die Definition als schreibgeschützte Tabelle / Ansicht erstellt.


1
Der Fehler bleibt in einigen Fällen ohnehin Ereignis in EF 5.0
Greg Z.

0

Sie müssen nicht das gesamte Modell löschen (das können Hunderte von Tabellen sein!).

Der Assistent kann "neue" Elemente hinzufügen, aber einige Änderungen wie das Ändern von zusammengesetzten Schlüsseln und das Umbenennen von Spalten - er weiß nicht, was zu tun ist - versucht es also nicht - und die Dinge werden nicht mehr synchronisiert.

SO: LÖSCHEN Sie die betreffenden Tabellen aus dem Modell (konzeptioneller Modus) UND aus dem Model.Store. Aktualisieren Sie das Modell dann mit dem Assistenten und fügen Sie nur die betreffenden Tabellen erneut hinzu.


0

Werfen Sie einfach ein paar Details für alle heraus, die dies noch nicht getan haben. Ich verwende Visual Studio 2013 mit installiertem Update 4. Ich habe einer Tabelle einige Felder hinzugefügt, die Tabelle aus meinem Modell gelöscht und bin dann zur Aktualisierung gegangen, sodass ich keine der Tabellen überprüfen konnte.

Ich habe einen Primärschlüssel.

Ich habe eine neue Testtabelle erstellt, die angezeigt wurde und die es mir ermöglichen würde, sie zu überprüfen, aber nicht mein Original.

Ich habe es noch nie in XML geöffnet und wusste nicht, wie das geht. Sie klicken mit der rechten Maustaste auf die .edmx-Datei und "öffnen mit" - wählen Sie den XML-Editor.

Der fragliche Tisch war in Ordnung, er hatte sogar die neuen Felder (seltsam).

Ich habe alle Verweise darauf gelöscht (hat ein paar Mal gedauert) - nachdem Sie einen gelöscht und gespeichert haben, wenn Sie versuchen, ihn zu öffnen und er nicht angezeigt wird, wählen Sie einfach "XML anzeigen" - sehen Sie sich die Fehler an und im Grunde Folgen Sie dem springenden Ball, bis Sie ihn aufgeräumt haben.

Ich hoffe, das zusätzliche Detail hilft jemandem.

Joe


0

Eine einfache Möglichkeit, die ich gefunden habe, bestand darin, (in SQL Server Management Studio) eine ID-Spalte vom Typ INT hinzuzufügen, die Option "Nullen zulassen" zu deaktivieren und unter Spalteneigenschaften (der ID) >> Identitätsspezifikation >> die Option (Ist Identität) zu überprüfen und zu erstellen sicheres Inkrement eingestellt.

Sobald dies erledigt ist, kehren Sie zu Ihrem .edmx-Fenster zurück, klicken Sie mit der rechten Maustaste und aktualisieren Sie das Modell aus der Datenbank.


0

Sie können eine Kreuztabelle für Primärschlüsselspalten hinzufügen. Dann löst sich das Problem

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.