Können SQL Server-Ansichten Primärschlüssel und Fremdschlüssel haben?

.net ado.net-entity-data-model database-design entity-framework sql-server

Frage

Ist es möglich, Primär- und Fremdschlüssel für Datenbankansichten in Microsoft SQL Server Management Studio zu definieren? Wie?

Ich versuche, ein ADO.NET-Entitätsdatenmodell zum Lesen aus vier alten, schlecht geformten Datenbanktabellen zu erstellen, die ich nicht ändern kann. Ich habe nur Ansichten der Daten erstellt, die ich brauche.

Die vier Ansichten sollten einer einfachen Drei-Einheiten-EDMX mit einer Viele-zu-Viele-Beziehung zugeordnet werden.

Ich erhalte diesen Fehler beim Erstellen meines Datenmodells:

Für die Tabelle / Sicht '...' ist kein Primärschlüssel definiert, und es kann kein gültiger Primärschlüssel abgeleitet werden. Diese Tabelle / Ansicht wurde ausgeschlossen. Um die Entität verwenden zu können, müssen Sie Ihr Schema überprüfen, die richtigen Schlüssel hinzufügen und das Kommentarzeichen aufheben.

Es wurden die Primärschlüssel von zwei Ansichten richtig abgeleitet. Aber mit den beiden anderen nicht.

Eine meiner Problemstellungen verwendet Aggregatfunktionen:

SELECT MAX(...) ... GROUP BY ...

Der andere sollte einen zusammengesetzten Primärschlüssel aus zwei Fremdschlüsseln haben.

Beliebte Antwort

Sie müssen Ihre Sicht so definieren, dass sie:

  • Enthält alle PRIMARY KEY Spalten
  • Verwendet keine JOIN 's
  • Verwendet keine Aggregatfunktionen oder UNION

Jede Zeile aus Ihrer Ansicht sollte genau einer Zeile aus der Tabelle entsprechen.

Eine meiner Problemansichten verwendet Aggregatfunktionen

Es kann nicht aktualisierbar sein. Für eine Readonly-Entität eine Lösung von hier :

Wenn kein Schlüssel abgeleitet werden kann, wird dem SSDL-Abschnitt der .edmx-Datei ein Codekommentar hinzugefügt, der das entsprechende EntityType-Element (ohne Schlüsselelemente) enthält.

In Ihrem Fall könnten Sie, da es scheint, dass Sie eine schreibgeschützte Entität wünschen, Folgendes tun:

  1. kommentieren Sie die SSDL-Entität
    • eine / einige Eigenschaften als Nullable = "False" markieren
    • Fügen Sie die entsprechenden Schlüsselelemente hinzu
    • Fügen Sie eine entsprechende definierende Abfrage hinzu.

Für die zweite Frage:

Der andere sollte einen zusammengesetzten Primärschlüssel aus zwei Fremdschlüsseln haben

Aus der Dokumentation :

Eine Tabelle, die eine Viele-zu-Viele-Beziehung zwischen zwei Tabellen in der Datenbank darstellt, hat möglicherweise keine entsprechende Entität im konzeptionellen Schema. Wenn die EDM Tools auf eine solche Tabelle ohne andere als die beiden Fremdschlüsselspalten stoßen, wird die Mapping-Tabelle im konzeptionellen Schema als Vielfachzuordnung anstelle einer Entität dargestellt.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum