我正在使用MVC.NET Web API、DB First的EF,并在我的上下文中关闭了懒加载。即使关闭了LazyLoading,EF仍然返回过多的数据。
例如,我有一个包含一个角色的用户。当我查询用户并包含角色时,由于已经将用户加载到上下文中,角色.用户属性会自动填充数据。
为什么我不能让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
简而言之,我希望EF从不加载导航属性/集合中的数据,除非我直接使用.Include()。在序列化为JSON时,我只想要明确请求的内容。即使关闭了延迟加载,已经存在于上下文中的导航属性(通常是“循环引用”)也会被加载并返回。