4

EdmGen.exeツールを使用してビューをプリコンパイルすることで、アプリケーションのパフォーマンスを向上できることがわかりました。

これで問題ありませんが、生成された .cs ファイルが実際にプロジェクトでどのように使用されるかは、私も私の大学もわかりません。どこにも生成されたクラスへの参照はないようですが、どのように含まれていますか?

それがどのように機能するかを知らないのは本当にかなりイライラするので、誰でもこれに光を当てることができますか!


編集

EntityViewGenerationAttributeがプリコンパイル済みビューのクラス タイプをマークするために使用されていることを確認しましたが、これはリフレクションを介して読み込まれたことを意味する必要がありますその場合、事前にコンパイルされたビュー クラスを特定のビューに使用する必要があることを明示的にコードに入れる方法はありますか?

4

1 に答える 1

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");
    }
于 2013-05-21T07:56:27.430 に答える