Condividi tramite


Elemento QueryView (EntitySetMapping)

In Entity Data Model (EDM) l'elemento QueryView di un EntitySetMapping definisce un mapping di sola lettura tra un'entità nel modello concettuale e un'entità nel modello di archiviazione. Per definire il mapping della visualizzazione di query si utilizza una query Entity SQL valutata rispetto al modello di archiviazione e si esprime il set di risultati in termini di entità nel modello concettuale. Poiché le visualizzazioni di query sono di sola lettura, non è possibile utilizzare comandi di aggiornamento standard per aggiornare i tipi definiti da tali visualizzazioni. A tale scopo è possibile utilizzare le funzioni di modifica. Per ulteriori informazioni, vedere Procedura: eseguire il mapping delle funzioni di modifica a stored procedure.

È possibile definire le visualizzazioni di query per consentire gli scenari seguenti:

  • Definire un'entità nel modello concettuale che non includa tutte le proprietà dell'entità nel modello di archiviazione. Tra queste figurano le proprietà che non presentano valori predefiniti e non supportano valori null.

  • Eseguire il mapping delle colonne calcolate nel modello di archiviazione alle proprietà dei tipi di entità nel modello concettuale.

  • Definire un mapping in cui le condizioni utilizzate per partizionare le entità nel modello concettuale non siano basate sull'uguaglianza. Quando si specifica un mapping condizionale utilizzando l'elemento Condition, la condizione fornita deve essere uguale al valore specificato. Per ulteriori informazioni, vedere Elemento Condition (MappingFragment).

  • Eseguire il mapping della stessa colonna nel modello di archiviazione a più tipi nel modello concettuale.

  • Eseguire il mapping di più tipi alla stessa tabella.

  • Definire associazioni nel modello concettuale che non siano basate sulle chiavi esterne dello schema relazionale.

  • Utilizzare la logica di business personalizzata per impostare il valore delle proprietà nel modello concettuale. È ad esempio possibile eseguire il mapping del valore di stringa "T" nell'origine dati a un valore booleano, ovvero true, nel modello concettuale.

  • Definire filtri condizionali per i risultati della query.

  • Applicare ai dati del modello concettuale un numero di restrizioni minore di quelle applicate al modello di archiviazione. È ad esempio possibile impostare una proprietà in modo che ammetta valori Null nel modello concettuale se la colonna alla quale è mappata non supporta valori null.

Le considerazioni seguenti riguardano la definizione delle visualizzazioni di query per le entità:

  • Le visualizzazioni di query sono di sola lettura. È possibile applicare aggiornamenti alle entità solo utilizzando le funzioni di modifica.

  • Quando viene definito un tipo di entità da una visualizzazione di query, è necessario definire anche tutte le entità correlate dalle visualizzazioni di query.

  • Quando si esegue il mapping di un'associazione molti-a-molti a un'entità nel modello di archiviazione che rappresenta una tabella dei collegamenti nello schema relazionale, è necessario definire un elemento QueryView nell'elemento AssociationSetMapping per la tabella in questione. Per ulteriori informazioni, vedere Elemento QueryView (AssociationSetMapping).

  • È necessario definire le visualizzazioni di query per tutti i tipi di una gerarchia di tipi. È possibile eseguire questa operazione nei modi seguenti:

    • Con un singolo elemento QueryView che specifica una singola query Entity SQL che restituisce un'unione di tutti i tipi di entità della gerarchia.

    • Con un singolo elemento QueryView che specifica una singola query Entity SQL che utilizza l'operatore CASE per restituire un tipo di entità specifico nella gerarchia, in base a una condizione specifica.

    • Con un elemento QueryView aggiuntivo per un tipo specifico della gerarchia. In tal caso, utilizzare l'attributo TypeName dell'elemento QueryView per specificare il tipo di entità per ogni visualizzazione.

  • Quando si definisce una visualizzazione di query, non è possibile specificare l'attributo StorageSetName sull'elemento EntitySetMapping.

  • Quando si definisce una visualizzazione di query, l'elemento EntitySetMapping non può contenere anche mapping Property.

Nell'esempio seguente viene definita una visualizzazione di query per il tipo di entità Product nel modello Sales di Adventure Works.

<EntitySetMapping Name="Product">
  <QueryView>
      SELECT VALUE AdventureWorksModel.Product(P.ProductID,
      P.Name, P.ProductNumber, P.Color, P.ListPrice, P.Size, P.Weight,
      P.Style)
      FROM Person.Product as P
  </QueryView>
</EntitySetMapping>

Poiché la query restituisce solo un sottoinsieme dei membri del tipo Product nel modello di archiviazione, il tipo Product nel modello Sales di Adventure Works è stato modificato in base al mapping seguente.

  <EntityType Name="Product">
  <Key>
    <PropertyRef Name="ProductID" />
  </Key>
  <Property Name="ProductID" Type="Int32" Nullable="false" />
  <Property Name="Name" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" />
  <Property Name="ProductNumber" Type="String" Nullable="false" MaxLength="25" Unicode="true" FixedLength="false" />
  <Property Name="Color" Type="String" MaxLength="15" Unicode="true" FixedLength="false" />
  <Property Name="ListPrice" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
  <Property Name="Size" Type="String" MaxLength="5" Unicode="true" FixedLength="false" />
  <Property Name="Weight" Type="Decimal" Precision="8" Scale="2" />
  <Property Name="Style" Type="String" MaxLength="2" Unicode="true" FixedLength="true" />
</EntityType>

Il tipo Product nel modello di archiviazione del modello Sales di Adventure Works non è stato modificato per l'esempio.

Vedere anche

Concetti

Scenari di mapping di Entity Data Model (Scenari dell'applicazione)
Elemento EntitySetMapping (MSL)