cuốn sách gpt4 ai đã làm

c# - 为什么 EF 急切地首先使用 EF 数据库加载所有导航属性?

In lại Tác giả: Vũ trụ không gian 更新时间:2023-11-03 21:25:03 29 4
mua khóa gpt4 Nike

我首先使用 EF 数据库,因为我喜欢在 SQL Management Studio 中设计我的数据库,坦率地说,让 Visual Studio 直接从数据库创建所有实体非常容易,而无需执行任何代码。

然而,我在 SQL Profiler 上注意到,每当我在结果集合上调用 ToList() 时,EF 都会急切地加载对象的所有相关实体。

假设我有一个这样的实体:

public class SomeEntity
{
public string Name { get; set; }
public IEnumerable ListOfOtherEntites { get; set; }
}

然后我可以进行查询,获取这些实体的列表:

public IEnumerable GetAllOfTheSomeEntities(Guid customerId){
return dbContex.SomeEntity.Where(x => x.CustomerId == customerId);
}

在代码的后面一点,我想用这个列表做一些事情(例如在 MVC 中的 Controller 中),我会在查询中调用 ToList():

var list = repository.GetAllOfTheSomeEntities(customerId).ToList();

即使我从未在实体上使用属性“ListOfOtherEntites”,它仍会加载到我的服务器内存中。

我知道我不必先在代码中担心这个问题,因为我可以使用“虚拟/非虚拟”属性和 Include 来控制加载 - 但我如何先在数据库中处理这个问题?

我可以在从数据库加载实体后更改它们;但如果我稍后更新我的模型,它们就会被重新创建。

câu trả lời hay nhất

您需要将导航属性标记为virtual 以在 Entity Framework 中启用延迟加载。

public class SomeEntity
{
public string Name { get; set; }
public virtual IEnumerable ListOfOtherEntites { get; set; }
}

不是简单地修改生成的代码就可以解决问题吗?

关于c# - 为什么 EF 急切地首先使用 EF 数据库加载所有导航属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611532/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress