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

时间:2019-05-31 10:36:27

标签: 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()
{
    Rooms = new HashSet<Room>();
}

public int Id { get; set; }
public string Username { get; set; }
public virtual ICollection<Room> Rooms { get; set; }

Room.cs:

public int Id { get; set; }
public string Name { get; set; }
public int? OwnerId { get; set; }

public virtual User Owner { get; set; }

(由于系统机房没有分配的所有者,因此OwnerId可为空)

问题是,如果我在登录时获得了用户对象,并且查看了user.Rooms,则即使数据库中有一个条目,集合也始终为空。

我知道include可以解决此问题,但这使我不得不从数据库中加载所有房间,当程序启动时要加载1000多个房间时,这是一个糟糕的主意。

为什么即使正确建立了关系,集合也总是空的?

1 个答案:

答案 0 :(得分:0)

设置关联项不同于将相关实体加载到内存中。 您可以根据需要选择4种不同的加载机制。

  1. 渴望(包括和然后包括)
  2. 明确
  3. 延迟加载(EF Core 2.1)
  4. 选择加载

您可以使用选择加载来筛选必须加载哪些相关实体。因此,您无需加载所有相关实体。