gpt4 book ai didi

c# - Entity Framework 总是包含上下文中的数据,即使我不要求它

转载 作者:IT王子 更新时间:2023-10-29 04:39:03 24 4
gpt4 key购买 nike

我正在使用 MVC.NET web api,首先使用 EF 和 DB,并且在我的上下文中关闭了延迟加载。 EF 返回的数据太多,即使关闭了 LazyLoading。

例如,我有一个角色的用户。当我查询 Users 和 Include Role 时,Role.Users 属性会自动填充数据,因为 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 时,我只想要我明确要求的内容。似乎即使关闭延迟加载,上下文中已经存在的导航属性(即通常为“循环引用”)也会被加载并返回。

最佳答案

您看到的行为称为 Relationship Fixup 并且您无法禁用它。

如果您正在为用户加载角色以序列化它们并将它们发送到某个地方,我猜您不想在它们已加载的上下文中跟踪实体的更改。因此,没有必要将它们附加到上下文,您可以使用:

return db.Users.Include(u => u.Role).AsNoTracking();

或者按照@STLRick 的建议,使用到专门用于序列化的对象的投影。

关于c# - Entity Framework 总是包含上下文中的数据,即使我不要求它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com