Procedura: aggiungere una query di definizione (Entity Framework)
In questo argomento viene descritto come aggiungere una query di definizione e un tipo di entità concettuale corrispondente a un file con estensione edmx. Una query di definizione consente di eseguire un'istruzione SQL specificata nell'elemento DefiningQuery di un file con estensione edmx. Per ulteriori informazioni, vedere DefiningQuery Element (EntitiContainer SSDL). Una query di definizione viene comunemente utilizzata per fornire funzionalità simili a quelle fornite da una visualizzazione di database; è però la visualizzazione a essere definita nel file con estensione edmx, non il database. Il tipo di entità concettuale è utilizzato per far emergere i dati esposti dalla query di definizione nel livello concettuale.
Nota: |
---|
Qualsiasi modifica apportata al modello di archiviazione, inclusa la definizione delle query, verrà sovrascritta quando si esegue la procedura guidata Aggiorna modello. |
Le query con parametri non possono essere eseguite come query di definizione. Per impostazione predefinita, i dati che emergono tramite una query di definizione sono dati di sola lettura. Tuttavia, è possibile aggiornare i dati eseguendo il mapping delle funzioni di inserimento, aggiornamento ed eliminazione del tipo di entità che fa emergere i dati nelle stored procedure. Per ulteriori informazioni, vedere Procedura: eseguire il mapping delle funzioni di modifica alle stored procedure (strumenti di Entity Data Model) e Procedura dettagliata: mapping di un'entità alle stored procedure (strumenti di Entity Data Model).
Le procedure riportate di seguito forniscono una struttura dettagliata per l'aggiunta di una query di definizione e di un tipo di entità concettuale a un file con estensione edmx. Nell'esempio che segue vengono forniti dettagli aggiuntivi sui passaggi delle procedure.
Le procedure presuppongono che un file con estensione edmx valido sia aperto in Visual Studio.
Aggiunta di una query di definizione
Per aggiungere una query di definizione
Aggiungere un elemento EntitySet alla sezione SSDL del file con estensione edmx. Specificare solo gli attributi Name e EntityType dell'elemento EntitySet. Per ulteriori informazioni, vedere EntitySet Element (EntityContainer SSDL).
Aggiungere un elemento DefiningQuery all'elemento EntitySet appena aggiunto. Specificare l'istruzione SQL da eseguire nel corpo dell'elemento DefiningQuery. Per ulteriori informazioni, vedere DefiningQuery Element (EntitiContainer SSDL).
Aggiungere un elemento EntityType alla sezione SSDL del file con estensione edmx. Questo elemento EntityType deve descrivere le colonne restituite dall'istruzione SQL nell'elemento DefiningQuery. Per ulteriori informazioni, vedere EntityType Element (SSDL).
Aggiunta di un tipo di entità al modello concettuale
Per aggiungere un tipo di entità concettuale
Aggiungere un elemento EntitySet alla sezione CSDL del file con estensione edmx. Per ulteriori informazioni, vedere EntitySet Element (EntityContainer CSDL).
Aggiungere un elemento EntityType alla sezione CSDL del file con estensione edmx. L'attributo Name deve avere lo stesso valore dell'attributo Name dell'elemento EntitySet menzionato nel passaggio precedente. Le proprietà del tipo di entità devono essere mappate ai dati restituiti dall'istruzione SQL specificata nell'elemento DefiningQuery della procedura riportata in precedenza. Per ulteriori informazioni, vedere EntityType Element (CSDL).
Mapping dei tipi di entità concettuali e di archiviazione
Per eseguire il mapping dei tipi di entità concettuali e di archiviazione
- Aggiungere un elemento EntitySetMapping alla sezione di mapping del file con estensione edmx che esegue il mapping delle entità concettuali e di archiviazione nelle due procedure precedenti. Per ulteriori informazioni, vedere EntitySetMapping Element (MSL) e Mapping a Conceptual Model to a Storage Schema.
Esempio
Nell'esempio seguente viene aggiunta una query di definizione al file School.edmx per far emergere le informazioni sui voti degli studenti con un tipo di entità GradeReport. Il file School.edmx può essere generato seguendo la procedura riportata nell'argomento Generazione del modello EDM School della Quickstart di Entity Framework.
Per aggiungere una query di definizione, si aggiunge innanzitutto l'elemento EntitySet seguente (contenente un elemento DefiningQuery) alla sezione SSDL del file con estensione edmx. Tenere presente quanto segue:
Soltanto gli attributi Name e EntityType dell'elemento EntitySet vengono specificati.
Il nome completo del tipo di entità viene utilizzato nell'attributo EntityType.
L'istruzione SQL da eseguire è specificata nell'elemento DefiningQuery.
<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>
Si aggiunge quindi l'elemento EntityType seguente nella sezione SSDL del file con estensione edmx. Tenere presente quanto segue:
Il valore dell'attributo Name corrisponde al valore dell'attributo EntityType nell'elemento EntitySet riportato sopra, sebbene il nome completo del tipo di entità venga utilizzato nell'attributo EntityType.
I nomi di proprietà corrispondono ai nomi di colonna restituiti dall'istruzione SQL nell'elemento DefiningQuery (sopra).
In questo esempio la chiave di entità è composta da tre proprietà, per assicurare un valore di chiave univoco.
<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>
Per aggiungere un tipo di entità al modello concettuale, si aggiunge innanzitutto l'elemento EntitySet seguente alla sezione CSDL del file con estensione edmx. Si noti che il nome completo del tipo di entità viene utilizzato nell'attributo EntityType.
<EntitySet Name="GradeReport" EntityType="SchoolModel.GradeReport" />
Si aggiunge quindi l'elemento EntityType seguente nella sezione CSDL del file con estensione edmx. Tenere presente quanto segue:
Il valore dell'attributo Name corrisponde al valore dell'attributo EntityType nell'elemento EntitySet riportato sopra, sebbene il nome completo del tipo di entità venga utilizzato nell'attributo EntityType.
I nomi di proprietà corrispondono ai nomi di colonna restituiti dall'istruzione SQL nell'elemento DefiningQuery (sopra).
In questo esempio la chiave di entità è composta da tre proprietà, per assicurare un valore di chiave univoco.
<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>
Per eseguire il mapping dei tipi di entità concettuali e di archiviazione, si aggiunge l'elemento EntitySetMapping seguente alla sezione di mapping del file con estensione edmx.
<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>
Il tipo di entità GradeReport viene ora aggiunto al modello School. Si noti che i dati emersi tramite il tipo di entità GradeReport sono di sola lettura.
Vedere anche
Concetti
Panoramica sui file con estensione edmx (Entity Framework)
Altre risorse
Modifica manuale di un file con estensione edmx (Entity Framework)