MVC.NET Web API、DB を最初に使用した EF を使用しており、コンテキストで遅延読み込みをオフにしています。LazyLoading がオフになっていても、EF はあまりにも多くのデータを返しています。
たとえば、1 つのロールを持つユーザーがいます。ユーザーをクエリしてロールを含めると、ユーザーがコンテキストに読み込まれているため、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 - 直接 .Include() しない限り、EF がデータをナビゲーション プロパティ/コレクションに読み込まないようにしたい。JSON にシリアル化するときは、明示的に要求するものだけが必要です。遅延ロード オフを使用しても、既にコンテキスト内にあるナビゲーション プロパティ (つまり、通常は「循環参照」) がロードされて返されるようです。