9

Ist es möglich, primäre und fremde Schlüssel für Datenbankansichten in Microsoft SQL Server Management Studio zu definieren? Wie?Können SQL Server-Ansichten Primär- und Fremdschlüssel enthalten?

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

Die vier Ansichten sollten einem einfachen EDMX mit drei Entitäten mit einer Viele-zu-Viele-Beziehung zugeordnet werden.

Ich bekomme diese Fehlermeldung, wenn mein Datenmodell zu erstellen:

Die Tabelle/View ‚...‘ nicht über einen Primärschlüssel definiert und keine gültigen Primärschlüssel abgeleitet werden könnten. Diese Tabelle wurde ausgeschlossen. Um die Entität zu verwenden, müssen Sie Ihr Schema überprüfen, die richtigen Schlüssel hinzufügen und auskommentieren.

Die Primärschlüssel von zwei Ansichten wurden korrekt abgeleitet. Aber mit den anderen beiden taten sie das nicht.

Einer meiner Problem Ansichten verwendet Aggregatfunktionen:

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

Der andere sollte eine Verbindung Primärschlüssel von zwei Fremdschlüssel haben.

+0

http://stackoverflow.com/a/10302066/413032 –

Antwort

7

Sie benötigen eine Ansicht zu definieren, so dass es:

  • alle PRIMARY KEY Spalten Inklusive
  • nicht JOIN Nutzt 's
  • keine Aggregatfunktionen verwenden Hat oder UNION' s

Jede Zeile aus Ihrer Sicht sollte genau einer Zeile aus der Tabelle zugeordnet werden.

Einer meiner Problem Ansichten verwendet Aggregatfunktionen

Es kann nicht aktualisierbar sein. Für eine Nur-Lese-Einheit, eine Lösung aus here:

Wenn kein Schlüssel abgeleitet werden kann, ein Code Kommentar, der das entsprechende EntityType Element enthält (ohne Schlüsselelemente) auf den Abschnitt der .edmx Datei SSDL hinzugefügt.

In Ihrem Fall, da es scheint, dass Sie eine Nur-Lese-Einheit wollen, könnten Sie:

  1. Kommentar- der SSDL Einheit
    • Markierung ein/einige Eigenschaften als Nullable = "False"
    • fügen Sie die entsprechenden Schlüsselelemente hinzu
    • fügen Sie eine entsprechende definierende Abfrage hinzu.

Für die zweite Frage:

Der andere sollte eine Verbindung Primärschlüssel von zwei Fremdschlüssel

Von documentation haben:

Ein Tisch, der repr Stellt eine Viele-zu-Viele-Beziehung zwischen zwei Tabellen in der Datenbank möglicherweise nicht über eine äquivalente Entität in dem konzeptionellen Schema. Wenn die EDM-Tools auf eine solche Tabelle mit anderen Spalten als den beiden Fremdschlüsseln stoßen, wird die Zuordnungstabelle im konzeptionellen Schema als eine Viele-zu-Viele-Verknüpfung anstelle einer Entität dargestellt.

+0

Weil ich nicht für Fremdschlüssel definieren (Kann ich?) zwischen Ansichten kann Visual Studio nicht die gewünschte Viele-zu-viele-Beziehung erstellen. –

+0

Danke. Ich blättere durch die automatisch erzeugte EDMX-XML-Datei und versuche, einen Sinn daraus zu machen. –

+0

Sie können Fremdschlüsseleinschränkungen zwischen den zugrunde liegenden Tabellen definieren, und die EDM-Tools sollten sie aufnehmen können. Stellen Sie außerdem sicher, dass in der Ansicht keine anderen Spalten als die beiden Fremdschlüssel vorhanden sind. – Quassnoi

-1

Eigentlich können Sie eine Ansicht erstellen, die JOINs verwendet und Entity in Ihrem Modell daraus generiert.

2

Sie können Ihre Ansichten ändern, indem Sie einen NOT NULL Indexspalte in Ihrer Ansicht nach etwas zu schaffen, wie dies zu tun:

ALTER VIEW [dbo].[ViewName] 
AS 
    SELECT ISNULL(CAST(CASE ROW_NUMBER() OVER (ORDER BY columnNames) 
          WHEN ROW_NUMBER() OVER (ORDER BY columnNames) 
          THEN ROW_NUMBER() OVER (ORDER BY columnNames) 
          ELSE 0 
         END AS INT), 0) AS ID 
Verwandte Themen