¿Cómo se cargan las vistas precompiladas de Entity Framework?

Descubrí que puedo aumentar el rendimiento de mi aplicación precompilando mis vistas usando el EdmGen.exe .

Todo esto está muy bien, pero ni yo ni mis universidades podemos resolverlo. cómo el proyecto utiliza realmente el archivo .cs generado. No parece haber ninguna referencia a la clase que se generó en ninguna parte, entonces, ¿cómo se incluye?

¿Alguien puede arrojar algo de luz sobre esto, ya que es bastante frustrante no saber cómo funciona?


EDITAR

Nos hemos cerciorado de que el EntityViewGenerationAttribute se usa para marcar el tipo de clase para la vista precompilada, sin embargo, esto debe significar que se carga a través del reflejo. Si ese es el caso, ¿hay alguna forma de poner explícitamente en el código que se debe usar una clase de vista precompilada para una vista determinada?

preguntado el 12 de junio de 12 a las 16:06

posible duplicado de ADO.NET Entity Framework - Vistas previas a la generación -. Tiene la misma pregunta, pero sin respuesta. -

1 Respuestas

Podría intentar cambiar el código generado. De modo que se devolvió una vista DIFERENTE. Pero si no devuelve una vista, espero que EF falle.

La idea es que la clase generada sea para TODOS los conjuntos en un DBContext. Y, de hecho, si la vista no coincide con el contexto que tiene (comparación hash), obtendrá un error de tiempo de ejecución.

eg

   /// <Summary>
    /// The constructor stores the views for the extents and also the hash values generated based on the metadata and mapping closure and views.
    /// </Summary>
    public ViewsForBaseEntitySets24F9763E92A9F77E970A08557E1855C7579989F684539A5FB429069F966B9B7B()
    {
        this.EdmEntityContainerName = "Ef6Ctx3";
        this.StoreEntityContainerName = "CodeFirstDatabase";
        this.HashOverMappingClosure = "d7686982aa7cffcf874313838914e93f78d4d7d6d345d19261ef5edc8b4e96dd";
        this.HashOverAllExtentViews = "7b8857ee3ee44d13b2479e43c54dbdfb6bc8914e222c7891afcfcd9a29b06b2f";
        this.ViewCount = 2;
    }

Pero para una vista determinada, podría devolver una cadena diferente

   /// <Summary>
    /// return view for CodeFirstDatabase.pocotest
    /// </Summary>
    private System.Collections.Generic.KeyValuePair<string, string> GetView0()
    {
        return new System.Collections.Generic.KeyValuePair<string, string>("CodeFirstDatabase.pocotest", @"
SELECT VALUE -- Constructing pocotest
    [CodeFirstDatabaseSchema.pocotest](T1.pocotest_Id, T1.pocotest_f1, T1.pocotest_f2, T1.pocotest_f2a, T1.pocotest_f3, T1.pocotest_f5, T1.pocotest_f6b)
FROM (
    SELECT 
        T.Id AS pocotest_Id, 
        T.f1 AS pocotest_f1, 
        T.f2 AS pocotest_f2, 
        T.f2a AS pocotest_f2a, 
        T.f3 AS pocotest_f3, 
        T.f5 AS pocotest_f5, 
        T.f6b AS pocotest_f6b, 
        True AS _from0
    FROM Ef6Ctx3.poco1s AS T
) AS T1");
    }

contestado el 21 de mayo de 13 a las 08:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.