Cómo generar previamente vistas para mejorar el rendimiento de las consultas (Entity Framework)
Para que una consulta se pueda ejecutar con un Entity Data Model (EDM), el Entity Framework genera un conjunto de vistas que se utilizan para tener acceso a la base de datos. El Entity Framework genera vistas la primera vez que se ejecuta una consulta y, a continuación, las mantiene durante la vigencia de la instancia de ObjectContext. Dado que la generación de la vista forma una parte significativa del costo total que supone ejecutar una única consulta, Entity Framework permite generar previamente estas vistas e incluirlas en el proyecto compilado. Además de generar y validar los archivos de asignación y de modelo del EDM, también se usa la herramienta Generador de EDM (EdmGen.exe) para generar previamente estas vistas. En este tema se muestra cómo utilizar EdmGen.exe para generar previamente las vistas del modelo School y agregar el archivo de vista al proyecto. El modelo School se crea en el Tutorial rápido de Entity Framework. El procedimiento final muestra cómo volver a agregar u asignar los archivos como recursos incrutados en una aplicación web ASP.NET.
Nota |
---|
Los procedimientos de este tema usan los eventos previos o posteriores a la generación de Visual Studio, que no se admiten en los sitios web ASP.NET. Para generar previamente las vistas para un EDM que usa un sitio web ASP.NET, debería crear el EDM en una biblioteca de clases independiente, utilizar el procedimiento siguiente para el proyecto de biblioteca de clase y hacer referencia al mismo en el proyecto de sitio web ASP.NET. O bien, considere usar un proyecto de aplicación web ASP.NET en lugar de un sitio web ASP.NET. Esto le permite incluir las vistas pregeneradas en el mismo proyecto que la aplicación web ASP.NET utilizando los procedimientos de este tema. |
Las vistas pregeneradas se validan en tiempo de ejecución para asegurarse de que x<son coherentes con la versión actual del EDM. Este procedimiento se asegura de que las vistas coinciden con el EDM. Puede omitir el primer procedimiento si el proceso de generación ya está generando los archivos de asignación y modelo en el directorio de salida. Los procedimientos de este tema usan el modelo School. Puede generar este modelo completando el Tutorial rápido (Entity Framework).
Nota |
---|
Se requiere Visual Studio 2008 Service Pack 1 (SP1) para realizar los procedimientos se este tema. |
Para generar los archivos de asignación y modelo para el modelo School en el directorio de salida
En el Explorador de soluciones, haga doble clic en el archivo School.edmx.
De esta forma se muestra el modelo School en el Entity Designer.
En el Explorador de modelos, seleccione el modelo SchoolModel y cambie Procesamiento de artefactos de metadatos por Copiar en el directorio de resultados.
De esta forma se asegura de que los archivos de asignación y modelo se generan en el directorio de resultados.
Genere la solución.
De esta forma se generan los archivos de asignación y modelo en el directorio de salida.
Para agregar la generación de la vista a un proyecto Visual Basic
En el Explorador de soluciones, seleccione el proyecto para el que desea especificar el evento de generación.
En el menú Proyecto, haga clic en Propiedades del Proyecto.
En la página Propiedades, haga clic en la ficha Compilar.
Haga clic en el botón Generar eventos.
En el cuadro de diálogo Generar eventos, agregue el evento anterior a la generación siguiente, sin saltos de línea:
"%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:VB /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.vb"
Haga clic en Aceptar.
Cierre la página Propiedades del proyecto.
Genere la solución.
De esta forma se genera el archivo de vista School.Views.cs.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre del proyecto y seleccione Agregar elemento existente.
En el cuadro de diálogo Agregar elemento existente, navegue a la carpeta raíz del proyecto y seleccione el archivo School.Views.vb.
Haga clic en Agregar.
Genere la solución.
Para agregar la generación de la vista a un proyecto de C#
En el Explorador de soluciones, seleccione el proyecto para el que desea especificar el evento de generación.
En el menú Proyecto, haga clic en Propiedades.
Seleccione la ficha Generar eventos.
En la ventana Línea de comandos del evento anterior a la compilación, agregue el evento anterior a la generación siguiente, sin saltos de línea:
"%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:CSharp /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.cs"
Genere la solución.
De esta forma se genera el archivo de vista School.Views.cs.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre del proyecto y seleccione Agregar elemento existente.
Aparece el cuadro de diálogo Agregar elemento existente.
Navegue a la carpeta raíz del proyecto y seleccione el archivo School.Views.cs.
Haga clic en Agregar.
Genere la solución.
Para volver a agregar los archivos de asignación y modelo como recursos incrustados para los proyectos ASP.NET
En el menú Proyecto, haga clic en Agregar elemento existente.
Vaya al directorio de resultados para el proyecto, seleccione School.csdl y, a continuación, haga clic en aceptar.
En el Explorador de soluciones, seleccione el archivo de metadatos .csdl.
En Propiedades, establezca Acción de compilación en Recurso incrustado.
Repita los pasos 1 a 3 para los archivos School.ssdl y School..msl.
En el Explorador de soluciones, haga doble clic en el archivo App.config y, a continuación, modifique el parámetro Metadata del atributo connectionString basándose en uno de los formatos siguientes:
Metadata=``res://<assemblyFullName>/<resourceName>;
Metadata=``res://*/<resourceName>;
Metadata=res://*;
El
resourceName
pueden incluir el espacio de nombres de proyecto. Para obtener más información, vea Cadenas de conexión (Entity Framework).