我确实采用了数据库优先方法,并且确实建立了数据库。我使用关系,并且有两个表:
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多个房间时,这是一个糟糕的主意。
为什么即使正确建立了关系,集合也总是空的?
答案 0 :(得分:0)
设置关联项不同于将相关实体加载到内存中。 您可以根据需要选择4种不同的加载机制。
您可以使用选择加载来筛选必须加载哪些相关实体。因此,您无需加载所有相关实体。