Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 永久禁用EF中的Configuration.ProxyCreationEnabled?_C#_Entity Framework_Configuration_Proxy_Entity - Fatal编程技术网

C# 永久禁用EF中的Configuration.ProxyCreationEnabled?

C# 永久禁用EF中的Configuration.ProxyCreationEnabled?,c#,entity-framework,configuration,proxy,entity,C#,Entity Framework,Configuration,Proxy,Entity,不必在每个查询上都执行以下操作,有没有一种方法可以全局设置该值?模型视图中有一个lazyloading设置,但似乎没有用于ProxyCreation的设置 using (var context = new LabEntities()) { **context.Configuration.ProxyCreationEnabled = false;** var Query = from s in context.EAs

不必在每个查询上都执行以下操作,有没有一种方法可以全局设置该值?模型视图中有一个lazyloading设置,但似乎没有用于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();
        }

我不完全理解此选项的好处,但我知道在VisualStudio中,is用乱七八糟的串行后缀标记我的所有对象,这使得使用调试器变得不合理

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

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

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

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

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

        this.Configuration.ProxyCreationEnabled = false;
    }
public()
:base(“name=”)
{
//添加以下代码行
this.Configuration.ProxyCreationEnabled=false;
}

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

如果刷新模型,重新生成自动文件会出现什么问题?手动编辑不会被写入吗?自动文件生成有什么问题?为了在构造函数中禁用它,您必须编辑自动生成的文件。在我的例子中,它的datamodel.context.cs.//此代码是从模板生成的。//手动更改此文件可能会导致应用程序出现意外行为。//如果重新生成代码,将覆盖对此文件的手动更改。//哦,您使用的是edmx-实体创建了部分OnContextCreated()-您可以将Configuration.ProxyCreationEnabled放在buddy类中,这样它就不会被覆盖。在我看来,这是正确的答案。不过,如果将来升级实体框架,请小心,因为它可能会覆盖您对.tt文件的更改。(除非我弄错了?)我一直想知道……我希望看到一个答案,它使用DbContext扩展生成的分部类(DbContext不定义
OnContextCreated
)。