Wie man lazy-loading arbeiten mit EF-Core 2.1.0 und proxies

Habe ich die folgenden Modelle:

public class Session
{
    public int SessionID { get; set; }
    public int UserID { get; set; }

    public virtual User User { get; set; }
}

public class User
{
    public int UserID { get; set; }
    public int OrganizationID { get; set; }

    public virtual ICollection<Session> Sessions { get; set; }
    public virtual Organization Organization { get; set; }
}

public class Organization
{
    public int OrganizationID { get; set; }

    public virtual ICollection<User> Users { get; set; }
}

eingetragen sind DbContext als:

modelBuilder.Entity<Session>(entity =>
{
    entity.ToTable("sessions");

    entity.Property(e => e.SessionID).HasColumnName("id");
    entity.Property(e => e.UserID).HasColumnName("user_id");

    entity.HasOne(e => e.User)
        .WithMany(e => e.Sessions)
        .HasForeignKey(e => e.UserID);
}

modelBuilder.Entity<User>(entity =>
{
    entity.ToTable("users");

    entity.Property(e => e.UserID).HasColumnName("id");
    entity.Property(e => e.OrganizationID).HasColumnName("organization_id");

    entity.HasOne(e => e.Organization)
        .WithMany(e => e.Users)
        .HasForeignKey(e => e.OrganizationID);
}

modelBuilder.Entity<Organization>(entity =>
{
    entity.ToTable("organizations");

    entity.Property(e => e.OrganizationID).HasColumnName("id");
}

Ich versuche, lazy loading mit Microsoft.EntityFrameworkCore.Proxies wie beschrieben hier:

builder.Register(c =>
{
    var optionsBuilder = new DbContextOptionsBuilder<Context>();
    optionsBuilder
        .UseLazyLoadingProxies()
        /* more options */
        ;

    var opts = optionsBuilder.Options;

    return new Context(opts);
}).As<DbContext>().InstancePerLifetimeScope();

Ich bin das Abfragen von Sitzungen mit context.All<Session>. Allerdings Session.User und Session.User.Organization sind standardmäßig null. Sie zu laden, ich habe etwas zu tun, wie context.All<Session>().Include(s => s.User).Include(s => s.User.Organization). Wie kann ich das vermeiden? Warum nicht UseLazyLoadingProxies Arbeit?


  • .NET-Core-version: 2.1.300-preview2-008533
  • Ziel: netcoreapp2.1
  • EF-Core (und Proxies) version: 2.1.0-preview2-final
  • Hast du zufällig eine Lösung zu finden? Habe das gleiche Problem
  • Um ehrlich zu sein, tun Sie wirklich brauchen, lazy-loading? Ich habe versucht, dass mit vollem EF und fand es nicht sehr nützlich, da es funktioniert nur so lange, wie Sie Ihre Rahmen lebt,so möchten Sie nur abrufen aller Informationen, Sie immer noch manuell laden alle Eigenschaften oder halten den Kontext am Leben. Ich erstellte extension Methoden für DbSets wie BuildSession, BuldUser, die alle beinhaltet, die ich brauche.
Schreibe einen Kommentar