Entity Framework: How to Disable Lazy Loading for Specific Query

Entity Framework 6: Disable Lazy Loading and specifically load included tables

That is callled eager loading you want to achieve.

var customerNotes = newContext.CustomerNotes.Include(t=> t.Node).ToList();

This should work, i don't really understand the keyword syntax.
If the code above doesn't work try this:

        var customerNotes = newContext.CustomerNotes.Include(t=> t.Node).Select(t=> new {
Node = t.Node,
Item = t
}).ToList();

Disable lazy loading by default in Entity Framework 4

The following answer refers to Database-First or Model-First workflow (the only two workflows that were available with Entity Framework (version <= 4.0) when the question was asked). If you are using Code-First workflow (which is available since EF version >= 4.1) proceed to ssmith's answer to this question for a correct solution.


The edmx file has in the <ConceptualModel> and <EntityContainer> definition an attribute for lazy loading where you can set lazy loading generally to false:

<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">

This creates the following setting in the ObjectContext constructor:

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
this.ContextOptions.LazyLoadingEnabled = false;
OnContextCreated();
}

My example is not meant that way that the generated ObjectContext (or DbContext in newer EF versions) should be edited manually (which would be overwritten with every model update from the database, as ctorx pointed out) but that the EntityContainer element in the edmx:ConceptualModels section of the EDMX file should be edited by adding the annotation:LazyLoadingEnabled="false" attribute - either manually in an XML editor or on the properties page of the designer surface where this option is available as well, Right-Click EDMX then Properties.

Sample Image

This modification of the EDMX file will automatically generate the context class with the disabled lazy loading option in the constructor like shown above. The EDMX file modification itself does not get overwritten when the model is updated from the database.

EF Core enable Lazy Loading conditionally

You can use ChangeTracker.LazyLoadingEnabled property:

Gets or sets a value indicating whether navigation properties for tracked entities will be loaded on first access.

The default value is true.

e.g.

context.ChangeTracker.LazyLoadingEnabled = false;
var query = context.Set<…>()...;


Related Topics



Leave a reply



Submit