10

不必对每个查询都执行以下操作,有没有办法在全局范围内设置该值?模型视图中有延迟加载设置,但似乎没有针对 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 中,我所有的对象都带有乱码的序列后缀,这使得使用调试器变得不合理。

4

2 回答 2

23

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

public class LabEntities : DbContext
{
   public LabEntities()
   {
      Configuration.ProxyCreationEnabled = false;
   }
}
于 2012-10-13T01:16:09.223 回答
17

如果您使用的是模型优先方法,这意味着您有一个 .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。重建您的项目并验证生成的上下文是否包含该行。

于 2012-12-06T21:27:39.680 回答