【问题标题】:Permanently disable Configuration.ProxyCreationEnabled in EF?在 EF 中永久禁用 Configuration.ProxyCreationEnabled?
【发布时间】:2012-10-03 20:31:27
【问题描述】:

不必对每个查询都执行以下操作,有没有办法在全局范围内设置该值?模型视图中有延迟加载设置,但似乎没有针对 ProxyCreation 的设置。

        using (var context = new LabEntities())
        {
            **context.Configuration.ProxyCreationEnabled = false;**

            var Query = from s in context.EAssets
                        .Include("Server").Include("Type").Include("Type.Definition")
                        where (s.Type.Definition.b_IsScannable == true) &&
                        (s.Server.s_Domain == Environment.UserDomainName || s.Server.s_Domain == null)
                        select s;
           var Entities = Query.ToList();
        }

我不完全理解这个选项的好处,但我知道在 Visual Studio 中,我所有的对象都带有乱码的序列后缀,这使得使用调试器变得不合理。

【问题讨论】:

    标签: c# entity-framework configuration proxy entity


    【解决方案1】:

    您可以在构造函数中禁用它,以便在您创建新上下文时将其禁用:

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

    【讨论】:

    • 刷新模型后自动生成文件的问题怎么办?手动编辑不会写完吗?
    • 自动生成文件有什么问题?
    • 为了在构造函数中禁用它,你必须编辑一个自动生成的文件。就我而言,它的 datamodel.context.cs。 // 此代码是从模板生成的。 // // 手动更改此文件可能会导致您的应用程序出现意外行为。 // 如果重新生成代码,将覆盖对该文件的手动更改。 // 自动生成>
    • 哦,您正在使用 edmx - 实体创建了部分 OnContextCreated() - 您可以将 Configuration.ProxyCreationEnabled 放在其中,放在伙伴类中,这样它就不会被覆盖
    【解决方案2】:

    如果您使用的是模型优先方法,即您有一个 .edmx 文件,则永久禁用此选项的方法是修改 .Context.tt 文件。此文件是构建过程用于生成 DbContext 派生类的代码生成模板。

    打开这个文件并找到构造函数:

    public <#=Code.Escape(container)#>()
            : base("name=<#=container.Name#>")
        {
    <#
            WriteLazyLoadingEnabled(container);
    #>
            //add the following line of code
    
            this.Configuration.ProxyCreationEnabled = false;
        }
    

    然后添加代码行以将此属性设置为 false。重建您的项目并验证生成的上下文是否包含该行。

    【讨论】:

    • 在我看来这是正确的答案。但是,如果将来升级 Entity Framework,请小心,因为它可能会覆盖您对 .tt 文件的更改。 (除非我弄错了?)
    • 一直想知道...我很想看到一个答案,它使用 DbContext(它没有定义 OnContextCreated)扩展生成的部分类。
    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多