Kol*_*oDS 14 c# entity-framework entity-framework-core .net-core asp.net-core
我有以下型号:
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; }
}
Run Code Online (Sandbox Code Playgroud)
注册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");
}
Run Code Online (Sandbox Code Playgroud)
我试图使用延迟加载与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();
Run Code Online (Sandbox Code Playgroud)
我正在使用查询会话context.All<Session>.然而,Session.User和Session.User.Organization默认情况下为空.要加载它们,我必须做类似的事情context.All<Session>().Include(s => s.User).Include(s => s.User.Organization).我怎么能避免这种情况?为什么不起作用UseLazyLoadingProxies?
2.1.300-preview2-008533netcoreapp2.12.1.0-preview2-finalJoh*_*man 11
在Asp.net Core 2.1中使用代理配置延迟加载的步骤
启用LazyLoadingProxies您可以通过调用UseLazyLoadingProxies来启用它:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)=> optionsBuilder .UseLazyLoadingProxies().UseSqlServer(myConnectionString);
或者在使用AddDbContext时:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLazyLoadingProxies()
.UseSqlServer(myConnectionString);
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以尝试在Startup.cslike中配置代理
public void ConfigureServices(IServiceCollection services)
{
#region Database configuration
// Database configuration
services.AddDbContext<DbContext>(options =>
options.UseLazyLoadingProxies()
.UseSqlServer(Configuration.GetConnectionString("MyConnectionString")));
#endregion Database configuration
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您已经可以将应用程序包更新为纯2.1.0(非最终版或RC版).配置可能不起作用的原因之一是组件的不稳定版本.
NB:Microsoft.EntityFrameworkCore.Proxies.dll从nuget独立于EFCore安装
| 归档时间: |
|
| 查看次数: |
10448 次 |
| 最近记录: |