C# 实体框架核心关系集合为空

C# 实体框架核心关系集合为空,c#,entity-framework-core,ef-database-first,C#,Entity Framework Core,Ef Database First,我做了一个数据库优先的方法,我做了我的数据库。我使用关系,我有两个表: users ------------- id PK int(11) username UNIQUE varchar(20) rooms ------------- id PK int(11) name VARCHAR(30) NOT NULL owner_id INDEX int(11) -> FK to users.id 当我制作脚手架时,模型看起来有点像这样: User.cs: public User() {

我做了一个数据库优先的方法,我做了我的数据库。我使用关系,我有两个表:

users
-------------
id PK int(11)
username UNIQUE varchar(20)

rooms
-------------
id PK int(11)
name VARCHAR(30) NOT NULL
owner_id INDEX int(11) -> FK to users.id
当我制作脚手架时,模型看起来有点像这样:

User.cs:

public User()
{
    Rooms = new HashSet<Room>();
}

public int Id { get; set; }
public string Username { get; set; }
public virtual ICollection<Room> Rooms { get; set; }
(OwnerId可为空,因为系统机房没有指定的所有者)

问题是,如果我在登录时获得了我的用户对象,并且我查看了
user.Rooms
,那么即使数据库有一个条目,集合也总是空的

我知道include修复了这个问题,但这让我不得不从数据库中加载所有房间,这是一个可怕的想法,因为在程序开始时加载了1000多个房间


即使关系设置正确,为什么集合始终为空?

设置关系与在内存中加载相关实体不同。 您可以根据需要选择4种不同的加载机制

  • 渴望(包括,然后包括)
  • 明确的
  • 延迟加载(EF核心2.1)
  • 选择加载

  • 可以使用“选择加载”筛选必须加载的相关图元。因此,您不需要加载所有相关的实体。

    为什么您认为它会从数据库表加载每个房间?使用“包含”时,应仅加载与查询的用户记录相关的文件室。您是否在迁移时先编写代码?如果您不首先使用代码,则有可能因为您的模式存在某些问题而使其无法正常工作。@Timothyjannac不,我先使用数据库。我的模式是正确的,因为它可以是AFAIKvar blog=await_context.blog.Select(p=>newblog{blogcoments=p.blogcoments.Where(s=>!s.ishiden)}.FirstOrDefaultAsync(m=>m.blogId==id);我认为它不起作用,因为我在
    p
    中的
    Rooms
    将是空的。也许我弄错了,但在这里它将
    blogcoments
    Rooms
    我假设)设置为
    p.blogcoments
    u.Rooms
    我假设)。但这样做仍然是空的。而且,这会使结果变为空(关于我使用的第一个或默认值)我不知道您的数据,但这是使用筛选器获取依赖实体数据的唯一方法。
    public int Id { get; set; }
    public string Name { get; set; }
    public int? OwnerId { get; set; }
    
    public virtual User Owner { get; set; }