Freigeben über


Gewusst wie: Hinzufügen einer definierenden Abfrage (Entity Framework)

In diesem Thema wird beschrieben, wie einer EDMX-Datei eine definierende Abfrage und ein entsprechender konzeptioneller Entitätstyp hinzugefügt werden. Mit einer definierenden Abfrage können Sie eine im DefiningQuery-Element einer EDMX-Datei angegebene SQL-Anweisung ausführen. Weitere Informationen finden Sie unter DefiningQuery Element (EntitiContainer SSDL). Eine definierende Abfrage wird im Allgemeinen verwendet, um eine ähnliche Funktion wie mit einer Datenbankansicht bereitzustellen, die Ansicht wird dabei aber nicht in der Datenbank definiert, sondern in der EDMX-Datei. Der konzeptionelle Entitätstyp wird verwendet, um von der definierenden Abfrage verfügbar gemachte Daten in der konzeptionellen Ebene zugänglich zu machen.

Cc982038.note(de-de,VS.100).gifHinweis:
Alle am Speichermodell, einschließlich der definierenden Abfragen vorgenommenen Änderungen werden überschrieben, wenn Sie den Modellaktualisierungs-Assistenten ausführen.

Parametrisierte Abfragen können nicht als definierende Abfragen ausgeführt werden. Daten, die mit einer definierenden Abfrage zugänglich gemacht werden, sind standardmäßig schreibgeschützt. Die Daten können jedoch aktualisiert werden, indem die Insert-, Update- und Delete-Funktionen des Entitätstyps, der die Daten zugänglich macht, gespeicherten Prozeduren zugeordnet werden. Weitere Informationen finden Sie unter Gewusst wie: Zuordnen von Änderungsfunktionen zu gespeicherten Prozeduren (Entity Data Model-Tools) und Exemplarische Vorgehensweise: Zuordnen einer Entität zu gespeicherten Prozeduren (Entity Data Model-Tools).

Die folgenden Verfahren bieten einen Überblick über das Hinzufügen einer definierenden Abfrage und eines konzeptionellen Entitätstyps zu einer EDMX-Datei. Das folgende Beispiel enthält weitere Details zu den Schritten in den Verfahren.

Die Verfahren setzen voraus, dass Sie eine gültige EDMX-Datei in Visual Studio geöffnet haben.

Hinzufügen einer definierenden Abfrage

So fügen Sie eine definierende Abfrage hinzu

  1. Fügen Sie dem SSDL-Abschnitt der EDMX-Datei ein EntitySet-Element hinzu. Geben Sie nur die Name- und EntityType-Attribute des EntitySet-Elements an. Weitere Informationen finden Sie unter EntitySet Element (EntityContainer SSDL).

  2. Fügen Sie dem neu hinzugefügten EntitySet-Element ein DefiningQuery-Element hinzu. Geben Sie die auszuführende SQL-Anweisung im Textkörper des DefiningQuery-Elements an. Weitere Informationen finden Sie unter DefiningQuery Element (EntitiContainer SSDL).

  3. Fügen Sie dem SSDL-Abschnitt der EDMX-Datei ein EntityType-Element hinzu. Dieses EntityType-Element muss die Spalten beschreiben, die von der SQL-Anweisung im DefiningQuery-Element zurückgegeben werden. Weitere Informationen finden Sie unter EntityType Element (SSDL).

Hinzufügen eines Entitätstyps zum konzeptionellen Modell

So fügen Sie einen konzeptionellen Entitätstyp hinzu

  1. Fügen Sie dem CSDL-Abschnitt der EDMX-Datei ein EntitySet-Element hinzu. Weitere Informationen finden Sie unter EntitySet Element (EntityContainer CSDL).

  2. Fügen Sie dem CSDL-Abschnitt der EDMX-Datei ein EntityType-Element hinzu. Das Name-Attribut muss denselben Wert enthalten wie das Name-Attribut des EntitySet-Elements im vorhergehenden Schritt. Die Eigenschaften des Entitätstyps müssen den Daten entsprechen, die von der im DefiningQuery-Element des obigen Verfahrens angegebenen SQL-Anweisung zurückgegeben werden. Weitere Informationen finden Sie unter EntityType Element (CSDL).

Zuordnen der konzeptionellen Entitätstypen und Speicherentitätstypen

So ordnen Sie konzeptionelle Entitätstypen und Speicherentitätstypen zu

  1. Fügen Sie dem Mappingabschnitt der EDMX-Datei ein EntitySetMapping-Element hinzu, durch das die in den vorhergehenden zwei Verfahren verwendeten konzeptionellen Entitäten und Speicherentitäten zugeordnet werden. Weitere Informationen finden Sie unter EntitySetMapping Element (MSL) und Mapping a Conceptual Model to a Storage Schema.

Beispiel

Im folgenden Beispiel wird der Datei "School.edmx" eine definierende Abfrage hinzugefügt, um Informationen zu den Noten von Studierenden mit einem GradeReport-Entitätstyp verfügbar zu machen. Die Datei "School.edmx" kann wie unter Erstellen des "School"-Entity Data Models im Entity Framework-Quickstart beschrieben generiert werden.

Fügen Sie zuerst dem SSDL-Abschnitt der EDMX-Datei das folgende EntitySet-Element (das ein DefiningQuery-Element enthält) hinzu, um eine definierende Abfrage hinzuzufügen. Beachten Sie Folgendes:

  • Es werden nur die Name- und EntityType-Attribute des EntitySet-Elements angegeben.

  • Im EntityType-Attribut wird der vollqualifizierte Name des Entitätstyps verwendet.

  • Die auszuführende SQL-Anweisung wird im DefiningQuery-Element angegeben.

<EntitySet Name="GradeReport"
 EntityType="SchoolModel.Store.GradeReport" >
  <DefiningQuery>
    SELECT CourseID, Grade, FirstName, LastName
    FROM StudentGrade
    JOIN
    (SELECT * FROM Person WHERE EnrollmentDate IS NOT NULL) AS p
    ON StudentID = p.PersonID
  </DefiningQuery>
</EntitySet>

Als Nächstes fügen Sie dem SSDL-Abschnitt der EDMX-Datei das folgende EntityType-Element hinzu. Beachten Sie Folgendes:

  • Der Wert des Name-Attributs entspricht dem Wert des EntityType-Attributs im obigen EntitySet-Element, obwohl der vollqualifizierte Name des Entitätstyps im EntityType-Attribut verwendet wird.

  • Die Eigenschaftennamen entsprechen den von der SQL-Anweisung im DefiningQuery-Element (oben) zurückgegebenen Spaltennamen.

  • In diesem Beispiel wird durch einen aus drei Eigenschaften bestehenden Entitätsschlüssel sichergestellt, dass der Schlüsselwert eindeutig ist.

<EntityType Name="GradeReport">
  <Key>
    <PropertyRef Name="CourseID" />
    <PropertyRef Name="FirstName" />
    <PropertyRef Name="LastName" />
  </Key>
  <Property Name="CourseID"
            Type="int"
            Nullable="false" />
  <Property Name="Grade"
            Type="decimal"
            Precision="3"
            Scale="2" />
  <Property Name="FirstName"
            Type="nvarchar"
            Nullable="false"
            MaxLength="50" />
  <Property Name="LastName"
            Type="nvarchar"
            Nullable="false"
            MaxLength="50" />
</EntityType>

Fügen Sie dem CSDL-Abschnitt der EDMX-Datei zuerst das folgende EntitySet-Element hinzu, um dem konzeptionellen Modell einen Entitätstyp hinzuzufügen. Im EntityType-Attribut wird der vollqualifizierte Name des Entitätstyps verwendet.

<EntitySet Name="GradeReport" EntityType="SchoolModel.GradeReport" />

Als Nächstes fügen Sie dem CSDL-Abschnitt der EDMX-Datei das folgende EntityType-Element hinzu. Beachten Sie Folgendes:

  • Der Wert des Name-Attributs entspricht dem Wert des EntityType-Attributs im obigen EntitySet-Element, obwohl der vollqualifizierte Name des Entitätstyps im EntityType-Attribut verwendet wird.

  • Die Eigenschaftennamen entsprechen den von der SQL-Anweisung im DefiningQuery-Element (oben) zurückgegebenen Spaltennamen.

  • In diesem Beispiel wird durch einen aus drei Eigenschaften bestehenden Entitätsschlüssel sichergestellt, dass der Schlüsselwert eindeutig ist.

<EntityType Name="GradeReport">
  <Key>
    <PropertyRef Name="CourseID" />
    <PropertyRef Name="FirstName" />
    <PropertyRef Name="LastName" />
  </Key>
  <Property Name="CourseID"
            Type="Int32"
            Nullable="false" />
  <Property Name="Grade"
            Type="Decimal"
            Precision="3"
            Scale="2" />
  <Property Name="FirstName"
            Type="String"
            Nullable="false"
            MaxLength="50"
            Unicode="true"
            FixedLength="false" />
  <Property Name="LastName"
            Type="String"
            Nullable="false"
            MaxLength="50"
            Unicode="true"
            FixedLength="false" />
</EntityType>

Fügen Sie dem Mappingabschnitt der EDMX-Datei das folgende EntitySetMapping-Element hinzu, um die konzeptionellen Entitätstypen und Speicherentitätstypen zuzuordnen.

<EntitySetMapping Name="GradeReport">
  <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.GradeReport)">
    <MappingFragment StoreEntitySet="GradeReport">
      <ScalarProperty Name="CourseID" ColumnName="CourseID" />
      <ScalarProperty Name="Grade" ColumnName="Grade" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

Der GradeReport-Entitätstyp wird nun dem Modell "School" zugeordnet. Die durch den GradeReport-Entitätstyp verfügbar gemachten Daten sind schreibgeschützt.

Siehe auch

Konzepte

Übersicht über die EDMX-Datei (Entity Framework)

Weitere Ressourcen

Manuelle Bearbeitung einer EDMX-Datei (Entity Framework)