Freigeben über


QueryView-Element (MSL)

Das QueryView-Element der Mapping-Spezifikationssprache (Mapping Specification Language, MSL) definiert eine schreibgeschützte Zuordnung eines Entitätstyp oder einer Zuordnung im konzeptionellen Modell zu einer Tabelle in der zugrunde liegenden Datenbank. Diese Zuordnung wird mithilfe einer Entity SQL -Abfrage definiert, die im Speichermodell ausgewertet wird. Der Ergebnissatz wird als Entität oder Zuordnung im konzeptionellen Modell ausgedrückt. Da Abfrageansichten schreibgeschützt sind, können die durch Abfrageansichten definierten Typen nicht mit herkömmlichen Aktualisierungsbefehlen aktualisiert werden. Diese Typen können mithilfe von Änderungsfunktionen aktualisiert werden. Weitere Informationen finden Sie unter How to: Map Modification Functions to Stored Procedures.

Cc716798.note(de-de,VS.100).gifHinweis:
Im QueryView-Element werden keine Entity SQL-Ausdrücke, die GroupBy enthalten, keine Gruppenaggregate und keine Navigationseigenschaften unterstützt.

Das QueryView-Element kann ein untergeordnetes Element des EntitySetMapping- oder des AssociationSetMapping-Elements sein. Im ersten Fall definiert die Abfrageansicht eine schreibgeschützte Zuordnung für eine Entität im konzeptionellen Modell. Im zweiten Fall definiert die Abfrageansicht eine schreibgeschützte Zuordnung für eine Zuordnung im konzeptionellen Modell.

Cc716798.note(de-de,VS.100).gifHinweis:
Wenn das AssociationSetMapping-Element für eine Zuordnung mit einer referenziellen Einschränkung zuständig ist, wird das AssociationSetMapping-Element ignoriert.Weitere Informationen finden Sie unter ReferentialConstraint-Element (CSDL).

Das QueryView-Element kann keine untergeordneten Elemente aufweisen.

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die für das QueryView-Element übernommen werden können.

Attributname Ist erforderlich Wert

TypeName

Nein

Der Name des konzeptionellen Modelltyps, der durch die Abfrageansicht zugeordnet wird.

Beispiel

Im folgenden Beispiel wird das QueryView-Element als untergeordnetes Element des EntitySetMapping-Elements verwendet. Es definiert eine Abfrageansichtszuordnung für den Department-Entitätstyp im Modell "School".

<EntitySetMapping Name="Departments" >
  <QueryView>
    SELECT VALUE SchoolModel.Department(d.DepartmentID, 
                                        d.Name, 
                                        d.Budget, 
                                        d.StartDate)
    FROM SchoolModelStoreContainer.Department AS d
    WHERE d.Budget > 150000
  </QueryView>
</EntitySetMapping>

Da die Abfrage nur eine Untermenge der Mitglieder des Department-Typs im Speichermodell zurückgibt, wurde der Department-Typ im Modell "School" auf der Grundlage dieser Zuordnung wie folgt geändert:

<EntityType Name="Department">
  <Key>
    <PropertyRef Name="DepartmentID" />
  </Key>
  <Property Type="Int32" Name="DepartmentID" Nullable="false" />
  <Property Type="String" Name="Name" Nullable="false" 
            MaxLength="50" FixedLength="false" Unicode="true" />
  <Property Type="Decimal" Name="Budget" Nullable="false" 
            Precision="19" Scale="4" />
  <Property Type="DateTime" Name="StartDate" Nullable="false" />
  <NavigationProperty Name="Courses" 
                      Relationship="SchoolModel.FK_Course_Department" 
                      FromRole="Department" ToRole="Course" />
</EntityType>

Beispiel

Im nächsten Beispiel wird das QueryView-Element als untergeordnetes Element eines AssociationSetMapping-Elements verwendet. Es definiert eine schreibgeschützte Zuordnung für die FK_Course_Department-Zuordnung im Modell "School".

Cc716798.note(de-de,VS.100).gifHinweis:
Wenn von einer Abfrageansicht eine Zuordnung für einen Zuordnungssatz definiert wird, müssen Zuordnungen für die Entitätstypen an den Enden der Zuordnung ebenfalls von Abfrageansichten definiert werden.

<EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer" 
                        CdmEntityContainer="SchoolEntities">
  <EntitySetMapping Name="Courses" >
    <QueryView>
      SELECT VALUE SchoolModel.Course(c.CourseID, 
                                      c.Title, 
                                      c.Credits)
      FROM SchoolModelStoreContainer.Course AS c
    </QueryView>
  </EntitySetMapping>
  <EntitySetMapping Name="Departments" >
    <QueryView>
      SELECT VALUE SchoolModel.Department(d.DepartmentID, 
                                          d.Name, 
                                          d.Budget, 
                                          d.StartDate)
      FROM SchoolModelStoreContainer.Department AS d
      WHERE d.Budget > 150000
    </QueryView>
  </EntitySetMapping>
  <AssociationSetMapping Name="FK_Course_Department" >
    <QueryView>
      SELECT VALUE SchoolModel.FK_Course_Department(
        CREATEREF(SchoolEntities.Departments, row(c.DepartmentID), SchoolModel.Department),
        CREATEREF(SchoolEntities.Courses, row(c.CourseID)) )
      FROM SchoolModelStoreContainer.Course AS c
    </QueryView>
  </AssociationSetMapping>
</EntityContainerMapping>

Kommentare

Sie können Abfragesichten definieren, um die folgenden Szenarien zu ermöglichen:

  • Definieren einer Entität im konzeptionellen Modell, die nicht alle Eigenschaften der Entität im Speichermodell einschließt. Dies schließt Eigenschaften ein, die keine Standardwerte haben und keine NULL-Werte unterstützen.

  • Zuordnen von berechneten Spalten im Speichermodell zu Eigenschaften von Entitätstypen im konzeptionellen Modell.

  • Definieren eines Mappings, bei dem die Bedingungen, die für die Partitionierung von Entitäten im konzeptionellen Modell verwendet werden, nicht auf Gleichheit basieren. Wenn Sie ein bedingtes Mapping mithilfe des Condition-Elements festlegen, muss die angegebene Bedingung gleich dem angegebenen Wert sein. Weitere Informationen finden Sie unter Condition-Element (MSL).

  • Zuordnen derselben Spalte im Speichermodell zu mehreren Typen im konzeptionellen Modell.

  • Zuordnen mehrerer Typen zu derselben Tabelle.

  • Definieren von Zuordnungen im konzeptionellen Modell, die nicht auf Fremdschlüsseln im relationalen Schema basieren.

  • Verwenden benutzerdefinierter Geschäftslogik, um die Werte von Eigenschaften im konzeptionellen Modell festzulegen. Sie können beispielsweise den Zeichenfolgenwert "T" in der Datenquelle einem booleschen Wert true im konzeptionellen Modell zuordnen.

  • Definieren bedingter Filter für Abfrageergebnisse.

  • Erzwingen von geringeren Dateneinschränkungen im konzeptionellen Modell als im Speichermodell. Sie können beispielsweise für eine Eigenschaft im konzeptionellen Modell festlegen, dass sie NULL-Werte annehmen kann, auch wenn die zugeordnete Spalte NULL-Werte nicht unterstützt.

Die folgenden Aspekte gelten, wenn Sie Abfragesichten für Entitäten definieren:

  • Abfragesichten sind schreibgeschützt. Sie können Entitäten nur mit Änderungsfunktionen aktualisieren.

  • Wenn Sie eine Entität durch eine Abfragesicht definieren, müssen Sie auch alle verknüpften Entitäten durch Abfragesichten definieren.

  • Wenn Sie eine m:n-Zuordnung einer Entität im Speichermodell zuordnen, die eine Linktabelle im relationalen Schema darstellt, müssen Sie für diese Linktabelle ein QueryView-Element im AssociationSetMapping-Element definieren.

  • Abfragesichten müssen für alle Typen in einer Typhierarchie definiert werden. Dazu stehen Ihnen folgende Möglichkeiten zur Verfügung:

    • Mit einem einzelnen QueryView-Element, das eine einzelne Entity SQL -Abfrage angibt, die eine Union aller Entitätstypen in der Hierarchie zurückgibt.

    • Mit einem einzelnen QueryView-Element, das eine einzelne Entity SQL -Abfrage angibt, die den CASE-Operator verwendet, um einen speziellen Entitätstyp in der Hierarchie auf Basis einer bestimmten Bedingung zurückzugeben.

    • Mit einem zusätzlichen QueryView-Element für einen bestimmten Typ in der Hierarchie. Verwenden Sie in diesem Fall das TypeName-Attribut des QueryView-Elements, um den Entitätstyp für jede Sicht anzugeben.

  • Wenn eine Abfragesicht definiert ist, kann das StorageSetName-Attribut für das EntitySetMapping-Element nicht angegeben werden.

  • Wenn eine Abfragesicht definiert ist, kann das EntitySetMapping-Element nicht gleichzeitig Property-Zuordnungen enthalten.

Siehe auch

Konzepte

EntitySetMapping-Element (MSL)
AssociationSetMapping-Element (MSL)

Weitere Ressourcen

CSDL-, SSDL- und MSL-Spezifikationen
Modellieren und Zuordnen (Entity Framework)