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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schritte Zum Konfigurieren von Lazy Loading mit Proxies in Asp.net Core 2.1
Sie können Sie mit einem Aufruf UseLazyLoadingProxies:
Oder bei der Verwendung von AddDbContext:
Können Sie versuchen, konfigurieren von proxies in
Startup.cs
wieUnd durch die Art und Weise kann man schon aktualisieren Sie die app-Pakete zu reinen 2.1.0 (nicht final oder RC). Einer der Gründe, warum Ihre Konfiguration kann nicht funktionieren, ist eine instabile version der Komponenten.
NB:
Microsoft.EntityFrameworkCore.Proxies.dll
installiert ist, von nuget-unabhängig von EFCoreIch gelöst, indem JSON-Serialisierung im Dienst wie diese Antwort
https://stackoverflow.com/a/49350457/4178475