我首先使用 MVC.NET web api、EF 和 DB,并且我在上下文中关闭了延迟加载。即使关闭了 LazyLoading,EF 也会返回太多数据。
例如,我有一个角色的用户。当我查询用户并包含角色时,Role.Users 属性会自动填充数据,因为用户已加载到上下文中。
为什么我不能让 EF 满足我的要求?还是我在这里错过了一些大事?
public partial class User
{
public int UserID { get; set; }
public string Title { get; set; }
public string Email { get; set; }
public int RoleID { get; set; }
....
public virtual Role Role { get; set; }
}
public partial class Role
{
public int RoleID { get; set; }
public string RoleName { get; set; }
....
public virtual ICollection<User> Users { get; set; }
}
return db.Users.Include(u => u.Role);
// ^^ user.Role.Users is filled with 1000s of users
TL;DR - 我希望 EF 永远不要将数据加载到导航属性/集合中,除非我直接 .Include() 它。序列化为 JSON 时,我只想要我明确要求的内容。似乎即使关闭延迟加载,已经在上下文中的导航属性(即通常是“循环引用”)也会被加载并返回。