【发布时间】:2018-05-04 17:33:14
【问题描述】:
我有以下型号:
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 的延迟加载,如 here 所述:
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(和代理)版本:
2.1.0-preview2-final
【问题讨论】:
-
您是否碰巧找到了解决方案?有同样的问题
-
说实话,你真的需要延迟加载吗?我用完整的 EF 进行了尝试,发现它不是很有用,因为它只有在你的上下文处于活动状态时才有效,所以如果你只想获取所有信息,你仍然必须手动加载所有属性或保持上下文活动。我为 BuildSession、BuldUser 等 DbSet 创建了扩展方法,其中包含我需要的所有内容。
标签: c# entity-framework asp.net-core .net-core entity-framework-core