1 c# entity-framework .net-core asp.net-core
我查看了 EFInclude()方法的定义和示例,但不幸的是,对于我的问题“什么是 Entity Framework Include() 以及何时使用它?”没有正确的解释。
这是一个用法示例。它的一般用途是什么以及为什么/何时应该使用它?
using (var context = new MyContext())
{
var list = context.Customers
.Include(c => c.Invoices)
.ToList();
foreach (var customer in list)
{
Console.WriteLine("Customer Name: {0}", customer.Name);
foreach (var customerInvoice in customer.Invoices)
{
Console.WriteLine("\tInvoice Date: {0}", customerInvoice.Date);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,我假设“客户”和“发票”是两个单独的表。
假设您有一位客户:
var customer = context.Customers.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
如果您尝试获取该客户的发票:
customer.Invoices
Run Code Online (Sandbox Code Playgroud)
会发生什么?这取决于你的 ORM 配置。有 2 种模式。
延迟加载 使用该模式(我认为这是默认模式),您将第一次调用数据库来检索客户(但仅限客户),然后第二次调用数据库来检索该客户的发票。但只有当您尝试获取发票时,才会发生第二次呼叫。
预加载 如果您不想进行多个数据库调用并且希望在一次调用中获取所有数据,则可以禁用延迟加载。但是,如果您按照我上面显示的相同方式获得客户,您将不会收到发票(您将得到“空”)。“包含”允许 EF 了解您想要在一次数据库调用中检索客户和发票:
var customer = context.Customers.Includes(c => c.Invoices).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
当您尝试获取该客户的发票时,所有内容都已在内存中,因此无需额外的数据库调用。
| 归档时间: |
|
| 查看次数: |
3760 次 |
| 最近记录: |