我确实做了一个数据库优先的方法,我确实做了我的数据库。我使用关系,我有两个表:
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
当我做脚手架时,模型看起来有点像这样:
用户.cs:
public User()
{
Rooms = new HashSet<Room>();
}
public int Id { get; set; }
public string Username { get; set; }
public virtual ICollection<Room> Rooms { get; set; }
房间.cs:
public int Id { get; set; }
public string Name { get; set; }
public int? OwnerId { get; set; }
public virtual User Owner { get; set; }
(所有者 ID 可为空,因为系统会议室没有分配的所有者(
问题是,如果我在登录时获得了我的用户对象,并且我查看了user.Rooms
,则集合始终为空,即使数据库具有条目也是如此。
我知道包括修复程序,但这让我不得不从数据库中加载所有房间,当程序开始时加载 1000+ 个房间时,这是一个糟糕的主意。
为什么即使关系设置正确,集合也始终为空?
设置关系 IP 不同于在内存上加载相关实体。您可以根据需要选择4种不同的加载机制。
- 渴望(包括然后包括(
- 明确
- 延迟加载(EF Core 2.1(
- 选择加载
您可以使用选择加载来筛选必须加载的相关实体。因此,您不需要加载所有相关的元素。