我在 .NET Core 中使用 Entity Framework Core,但我很难让相关对象立即加载。
这是我的相关代码:
public class User : SchemaObject, IUser
{
public long? UserID { get; set; }
public Session Session { get; }
}
public class Session : SchemaObject, ISession
{
public long? SessionID { get; set; }
public long? UserID { get; set; }
public User User { get; set; }
}
public class Context : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Session> Sessions { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasOne(e => e.Session)
.WithOne(e => e.User)
.HasForeignKey<Session>(e => e.UserID)
.IsRequired();
modelBuilder.Entity<User>()
.Navigation(u => u.Session)
.AutoInclude();
}
}
查询:
user = db.Users
.Include(u => u.Session)
.FirstOrDefault(u => u.Session.SessionID == result.requestObj.Session.ID);
我尝试在查询中使用
.Include()
以及在 .AutoInclude()
中使用 OnModelCreating()
,但都不起作用。
像这样进行检查
if (user.Session == null)
永远会成功。我让它发挥作用的唯一方法就是做
db.Entry(user).Reference(u => u.Session).Load();
在初始查询之后,但是,据我所知,这将再次往返数据库,而我不希望这样。
如有任何帮助,我们将不胜感激。
我面临其他实体框架问题,@StevePy here的评论修复了所有问题