gpt4 book ai didi

c# - 如何加载 Entity Framework 预编译 View

转载 作者:行者123 更新时间:2023-11-30 12:49:41 25 4
gpt4 key购买 nike

我发现我可以通过使用 EdmGen.exe 工具预编译我的 View 来提高我的应用程序的性能。

一切都很好,但我和我的大学都无法弄清楚项目实际使用如何生成的 .cs 文件。似乎没有对在任何地方生成的类的任何引用,那么它是如何被包含进来的呢?

任何人都可以阐明这一点,因为不知道它是如何工作的真的很令人沮丧!


编辑

我们已经确定 EntityViewGenerationAttribute用于标记预编译 View 的类类型,但这必须意味着它是通过反射加载的。如果是这样,是否有任何方法可以明确地将预编译 View 类应用于特定 View 的代码中?

最佳答案

您可以尝试更改生成的代码。这样就返回了一个不同的 View 。但是,如果您不返回 View ,我预计 EF 将失败。

想法是生成的类适用于 DBContext 中的所有集合。事实上,如果 View 与您拥有的上下文不匹配(哈希比较),您将收到运行时错误。

例如

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

但是对于给定的 View ,您可以返回不同的字符串

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

关于c# - 如何加载 Entity Framework 预编译 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com