QueryView (Elemento) (MSL)
El elemento QueryView del lenguaje de especificación de asignaciones (MSL) define una asignación de solo lectura entre un tipo de entidad o asociación en el modelo conceptual y una tabla de la base de datos subyacente. La asignación se define con una consulta de Entity SQL que se evalúa contra el modelo de almacenamiento, mientras que el conjunto de resultados se expresa en relación a una entidad o asociación del modelo conceptual. Dado que las vistas de consulta son de solo lectura, no puede utilizar los comandos de actualización estándar para actualizar los tipos que se definen mediante vistas de consulta. Puede realizar las actualizaciones de estos tipos utilizando funciones de modificación. Para obtener más información, vea How to: Map Modification Functions to Stored Procedures.
Nota: |
---|
En el elemento QueryView, no se admiten expresiones de Entity SQL que contengan GroupBy, agregados de grupo o propiedades de navegación. |
El elemento QueryView puede ser un elemento secundario del elemento EntitySetMapping o el elemento AssociationSetMapping. En el primer caso, la vista de consulta define una asignación de solo lectura para una entidad del modelo conceptual. En el último caso, la vista de consulta define una asignación de solo lectura para una asociación del modelo conceptual.
Nota: |
---|
Si el elemento AssociationSetMapping es para una asociación con una restricción referencial, se omite el elemento AssociationSetMapping.Para obtener más información, vea ReferentialConstraint (Elemento) (CSDL). |
El elemento QueryView no puede tener ningún elemento secundario.
Atributos aplicables
En la tabla siguiente se describen los atributos que se pueden aplicar al elemento QueryView.
Nombre de atributo | Es necesario | Valor |
---|---|---|
TypeName |
No |
El nombre del tipo de modelo conceptual que se está asignando mediante la vista de consulta. |
Ejemplo
El siguiente ejemplo muestra el elemento QueryView como un elemento secundario del elemento EntitySetMapping y define una asignación de vista de consulta para el tipo de entidad Department del Modelo 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>
Dado que la consulta solo devuelve un subconjunto de los miembros del tipo Department en el modelo de almacenamiento, el tipo Department del modelo School se ha modificado según esta asignación de la forma siguiente:
<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>
Ejemplo
El ejemplo siguiente muestra el elemento QueryView como el elemento secundario de un elemento AssociationSetMapping y define una asignación de solo lectura para la asociación FK_Course_Department
en el modelo School.
Nota: |
---|
Si una vista de consulta define una asignación de conjunto de asociaciones, las asignaciones para los tipos de entidad en los extremos de la asociación también deben ser definidas por vistas de consulta. |
<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>
Comentarios
Puede definir vistas de consulta para habilitar los escenarios siguientes:
Defina una entidad en el modelo conceptual que no incluya todas las propiedades de la entidad en el modelo de almacenamiento. Se incluyen las propiedades que no tienen valores predeterminados y no admiten valores null.
Asigne las columnas calculadas del modelo de almacenamiento a las propiedades de los tipos de entidad del modelo conceptual.
Defina una asignación en la que las condiciones utilizadas para dividir las entidades del modelo conceptual no se basen en la igualdad. Al especificar una asignación condicional mediante el elemento Condition, la condición proporcionada debe igualar el valor especificado. Para obtener más información, vea Condition (Elemento) (MSL).
Asigne la misma columna en el modelo de almacenamiento a varios tipos en el modelo conceptual.
Asigne varios tipos a la misma tabla.
Defina asociaciones en el modelo conceptual que no se basen en claves externas en el esquema relacional.
Utilice la lógica de negocios personalizada para establecer el valor de las propiedades del modelo conceptual. Por ejemplo, podría asignar el valor de cadena "T" en el origen de datos a un valor de true, un valor Boolean, en el modelo conceptual.
Defina filtros condicionales para los resultados de la consulta.
Aplique menos restricciones en los datos del modelo conceptual que en el modelo de almacenamiento. Por ejemplo, podría hacer que una propiedad del modelo conceptual acepte valores NULL aun cuando la columna a la que está asignada no admita valores null.
Las consideraciones siguientes se aplican al definir las vistas de consulta para las entidades:
Las vistas de consulta son de solo lectura. Solo puede realizar las actualizaciones a las entidades utilizando las funciones de modificación.
Al definir un tipo de entidad mediante una vista de consulta, también debe definir todas las entidades relacionadas mediante vistas de consulta.
Al asignar una asociación varios a varios a una entidad en el modelo de almacenamiento que representa una tabla de vínculos del esquema relacional, debe definir un elemento QueryView en el elemento AssociationSetMapping para esta tabla de vínculos.
Las vistas de consulta se deben definir para todos los tipos de una jerarquía de tipos. Puede hacer esto de las siguientes maneras:
Con un elemento QueryView único que especifica una consulta de Entity SQL única que devuelve una unión de todos los tipos de entidad en la jerarquía.
Con un elemento QueryView único que especifica una consulta de Entity SQL única que utiliza al operador CASE para devolver un tipo de entidad concreto de la jerarquía según una condición concreta.
Con un elemento QueryView adicional para un tipo específico en la jerarquía. En este caso, utilice el atributo TypeName del elemento QueryView para especificar el tipo de entidad para cada vista.
Al definir una vista de consulta, no puede especificar el atributo StorageSetName en el elemento EntitySetMapping.
Al definir una vista de consulta, el elemento EntitySetMapping tampoco puede contener asignaciones Property.
Vea también
Conceptos
EntitySetMapping (Elemento) (MSL)
AssociationSetMapping (Elemento) (MSL)
Otros recursos
Especificaciones CSDL, SSDL y MSL
Modelado y asignación (Entity Framework)