gpt4 book ai didi

visual-studio - 使用数据库优先方法选择性地禁用延迟加载

转载 作者:行者123 更新时间:2023-12-02 02:01:34 25 4
gpt4 key购买 nike

我对禁用整个上下文的延迟加载不感兴趣。我只想有选择地禁用一些关键导航属性的延迟加载。

通过 Code First 方法,我了解了如何有选择地禁用延迟加载:

public virtual Person Requestor { get; set; } //lazy loading enabled
...
public Person Requestor { get; set; } //lazy loading disabled

然而,使用数据库优先方法,这是从模板生成的代码,因此此修改将在下一次重新生成时丢失。

有没有办法修改模型或模板生成器以选择性地禁用延迟加载?

最佳答案

我不知道有什么办法。但是,如果您打算使用实体代码生成器,则可以构建警告系统,以便在重新生成代码时立即收到通知(取决于您的构建策略)。

所以我要做的是针对选定的实体,假设实体是 Request 并且有问题的属性是 Requestor 然后编写一个测试来断言该属性是不是虚拟的

            [TestMethod()]
public void RequestPropertyRequestor_MustNotBeVirtual() {

PropertyInfo[] properties = typeof(Request).GetProperties()
.Where(p => p.GetGetMethod().IsVirtual).ToArray();
Assert.AreEqual(0, properties.Count(p => p.Name == "Requestor"), "Model Code Regenerated - change the Request Entity");
}

不确定反射代码的准确性,但您明白我的意思。这样,当重新生成实体并且您修改了代码时,测试将失败。预警系统

您可以关闭代码生成并使用 POCO。

建议的更改

如果您不想关闭代码生成,那么修改 T4 模板是可行的方法。只是

  • 在 EDMX 设计器的属性中将“代码生成策略”设置为,这样默认生成就不会发生。这导致没有派生的 DbContext 或实体类
  • 在 EDMX 设计器中,右键单击绘图表面并选择“添加代码生成项”。那里应该列出了生成器,如果不是通过 NuGet 安装一个的话。选择 EF5 DbContext。
  • 找到用于实体生成和修改的 T4 模板。

关于visual-studio - 使用数据库优先方法选择性地禁用延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001275/

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