Permanently disable Configuration.ProxyCreationEnabled in EF?
Solution 1
You can disable it in the constructor, so that it gets disabled anytime you create a new context:
public class LabEntities : DbContext
{
public LabEntities()
{
Configuration.ProxyCreationEnabled = false;
}
}
Solution 2
If you're using a model-first approach, meaning you have a .edmx file, the way to permanently disable this option is to modify the .Context.tt file. This file is a code generation template that the build process uses to generate your DbContext-derived class.
Open this file and locate the constructor:
public <#=Code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
<#
WriteLazyLoadingEnabled(container);
#>
//add the following line of code
this.Configuration.ProxyCreationEnabled = false;
}
then add the line of code to set this property to false. Rebuild your project and verify the generated context contains the line.
jwrightmail
Updated on July 09, 2022Comments
-
jwrightmail almost 2 years
Instead of having to do the following on every query, is there a way to just set that value globally? There is a lazyloading setting in the model view, but there does not seem to be a setting for the 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(); }
I don’t fully understand the benefits of this option, but i know that in visual studio is tags all my objects with gibberish serial suffixes and makes using the debugger unreasonable.
-
jwrightmail over 11 yearsWhat about the problem reguarding the automatic file generation that happends if you refresh the model? Wont the manual edits get over writen?
-
Mark Oreta over 11 yearsWhat problem with the automatic file generation?
-
jwrightmail over 11 yearsIn order to disable it in the constructor, you have to edit an automaticlly generated file. In my case, its datamodel.context.cs. <auto-generated> // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. // </auto-generated>
-
Mark Oreta over 11 yearsOh you're using an edmx - The entities creates a partial OnContextCreated() - you can put the Configuration.ProxyCreationEnabled in that, in a buddy class so that it doesn't get overwritten
-
rwalter over 10 yearsThis is the correct answer in my view. Be careful, though, if upgrade Entity Framework in future as it may overwrite your changes to the .tt file. (Unless I'm mistaken?)
-
seebiscuit almost 7 yearsAlways wondered about that...I would love to see an answer that extends the generated partial class using DbContext (which doesn't define
OnContextCreated
).