如何做实体框架预编译的意见得到加载(How do Entity Framework pre-comp

2019-09-18 01:48发布

我发现我可以增加,预编译使用我的意见我的应用程序的性能EdmGen.exe工具。

这是一切都很好,但是没有我或我的大学可以工作在所产生的cs文件实际上是如何使用的项目。 目前似乎没有是这是在任何地方生成的类的任何引用,所以它是如何得到包括在内?

任何人都可以摆脱任何光线就这个作为它真的相当令人沮丧,不知道它是如何工作!


编辑

我们经查实EntityViewGenerationAttribute用于标记的预编译的视图类的类型,然而这必然意味着其加载虽然反射。 如果多数民众赞成的情况下,是有一个预编译的视图类应该用于某一观点明确地把它在代码中的任何方式?

Answer 1:

你可以尝试改变生成的代码。 使得不同的视图返回。 但是,如果你不返回一个观点我希望EF将失败。

这个想法是生成的类是在所有的DbContext套。 而事实上如果视图犯规匹配你有上下文(哈希比较),你会得到一个运行时错误。

例如

   /// <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;
    }

但是,对于一个给定的观点,你可以返回不同的字符串

   /// <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");
    }


文章来源: How do Entity Framework pre-compiled views get loaded