C# 永久禁用EF中的Configuration.ProxyCreationEnabled?
不必在每个查询上都执行以下操作,有没有一种方法可以全局设置该值?模型视图中有一个lazyloading设置,但似乎没有用于ProxyCreation的设置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
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
)。