EF Core - How enable lazy loading in Entity framework core?

.net-core entity-framework entity-framework-core lazy-loading

Question

I've separated the Read Context from Write Now I'm going to enable LazyLoading in ReadOnlyContext by default. I also used the following method, but unfortunately it does not work.

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(@"Data Source=.;Initial Catalog=UniversityDb;Persist Security Info=True;User ID=admin;Password=asdasdsadasd");
}

my model:

public class Partner : BaseEntity<int>
{
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
    public bool IsDisabled { get; set; }
    public bool IsDeleted { get; set; }
    public virtual ICollection<PartnerUser> PartnerUsers { get; set; }
}

my ef version:

EntityFramework core v 2.1.2

public async Task<PartnerQuery> Get(int id)
{
    var result = await _partnerDbSet.SingleAsync(c => c.Id == id);
    var list = result.PartnerUsers;
    return new PartnerQuery()
    {
        CreateDate = result.CreateDate,
        Name = result.Name,
        Id = result.Id
    };
}

I got this error:

"Error generated for warning 'Microsoft.EntityFrameworkCore.Infrastructure.DetachedLazyLoadingWarning: An attempt was made to lazy-load navigation property 'PartnerUsers' on detached entity of type 'PartnerProxy'. Lazy-loading is not supported for detached entities or entities that are loaded with 'AsNoTracking()'.'. This exception can be suppressed or logged by passing event ID 'CoreEventId.DetachedLazyLoadingWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'."

How can this problem be solved?

1
4
9/24/2018 10:37:20 AM

Popular Answer

You are using AsNoTracking() somewhere in your code, Lazy Loading won't work when using AsNoTracking() method.

You have two options:

  1. Use the Include() method to load your relationships

  2. Ignore the warning and simply get null for your relationships

You can configure EF to ignore this error:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseLazyLoadingProxies()
        .ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.DetachedLazyLoadingWarning))
        .UseSqlServer(@"Data Source=.;Initial Catalog=UniversityDb;Persist Security Info=True;User ID=admin;Password=asdasdsadasd");
}
3
11/21/2018 7:06:33 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow