【问题标题】:disable dynamic proxy in Entity framework globally全局禁用实体框架中的动态代理
【发布时间】:2018-03-21 06:32:38
【问题描述】:

请问如何禁用在 Entity Framework 5 中创建的所有实体的动态代理。

目前,我在 DbContext 的每个实例中设置此 espEntities.Configuration.ProxyCreationEnabled = false; 是否有一种方法可以将当前和未来的模型作为一次性任务执行此操作。

谢谢

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    方法一

    如果您有 EDMX 模型,则会创建一个分部类。使用它并在OnContextCreated 中禁用ProxyCreationEnabled

    public partial class MyModelContainer
    {
        public void OnContextCreated()
        {
            this.Configuration.ContextOptions.ProxyCreationEnabled = false;
        }
    }
    

    方法二

    编辑 model.tt 文件。找到包含以下内容的行:

    partial class <#=code.Escape(container)#> : DbContext
    

    并添加

    this.Configuration.ProxyCreationEnabled = false;
    

    方法3

    如果您不使用 EDMX 文件,请在您的上下文构造函数中执行此操作:(假设您的上下文称为 EspEntities)

    public class EspEntities : DbContext
    {
       public EspEntities()
       {
          Configuration.ProxyCreationEnabled = false;
       }
    }
    

    【讨论】:

    • 你好大卫,我假设在这种情况下的上下文构造函数在 model.context.cs 中找到。但是,如果是这种情况,如果更新 EDMX 模型并且更改将被覆盖,则会产生问题?
    • 代理创建!=延迟加载。延迟加载确实需要创建代理,但禁用它并不会禁用代理创建。还需要(并使用)代理创建,例如变化跟踪。您的原始选项很好,只要您在模板中进行更改(而不是模板的输出),或者将其添加到新文件(该类应该是部分类,因此可以在其他文件中扩展) .
    • 再次感谢 David 的快速响应...但是,这只是禁用延迟加载并且仍然生成动态代理...?
    • @hvd 你的意思是我应该通过创建一个新的局部类来扩展 model.context.cs 并覆盖现有的构造函数?在 model.tt 文件中进行此更改的任何好的提示之间?
    • 啊,是的,抱歉,又做了一个改动。
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2017-12-06
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多