У меня есть следующие модели:
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; }
}
, которые зарегистрированы в DbContext
как:
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");
}
Я пытаюсь использовать отложенную загрузку с Microsoft.EntityFrameworkCore.Proxies
, как описано здесь :
builder.Register(c =>
{
var optionsBuilder = new DbContextOptionsBuilder<Context>();
optionsBuilder
.UseLazyLoadingProxies()
/* more options */
;
var opts = optionsBuilder.Options;
return new Context(opts);
}).As<DbContext>().InstancePerLifetimeScope();
Я запрашиваю сессии, используя context.All<Session>
. Однако Session.User
и Session.User.Organization
по умолчанию не имеют значения. Чтобы загрузить их, я должен сделать что-то вроде context.All<Session>().Include(s => s.User).Include(s => s.User.Organization)
. Как я могу избежать этого? Почему UseLazyLoadingProxies
не работает?
- .NET Core версия:
2.1.300-preview2-008533
- Цель:
netcoreapp2.1
- EF Core (и Proxies) версия:
2.1.0-preview2-final