Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.NET Core中的EF Core加载单个实体及其相关数据的更好方法是什么?_C#_Entity Framework_Asp.net Core - Fatal编程技术网

C# 使用ASP.NET Core中的EF Core加载单个实体及其相关数据的更好方法是什么?

C# 使用ASP.NET Core中的EF Core加载单个实体及其相关数据的更好方法是什么?,c#,entity-framework,asp.net-core,C#,Entity Framework,Asp.net Core,出于好奇,在EF Core中,哪种方法更适合加载单个实体及其相关数据 急装 Customer customer = await _efContext.Customers .Include(c => c.ManyContacts) .Include(c => c.ManyOrders) .SingleAsync(c => c.CustomerId == customerId); Customer customer = await _efContext.

出于好奇,在EF Core中,哪种方法更适合加载单个实体及其相关数据

急装

Customer customer = await _efContext.Customers
    .Include(c => c.ManyContacts)
    .Include(c => c.ManyOrders)
    .SingleAsync(c => c.CustomerId == customerId);
 Customer customer = await _efContext.Customers.FindAsync(customerId);
 await _efContext.Entry(customer).Collection(c => c.ManyContacts).LoadAsync();
 await _efContext.Entry(customer).Collection(c => c.ManyoOrders).LoadAsync();
显式加载

Customer customer = await _efContext.Customers
    .Include(c => c.ManyContacts)
    .Include(c => c.ManyOrders)
    .SingleAsync(c => c.CustomerId == customerId);
 Customer customer = await _efContext.Customers.FindAsync(customerId);
 await _efContext.Entry(customer).Collection(c => c.ManyContacts).LoadAsync();
 await _efContext.Entry(customer).Collection(c => c.ManyoOrders).LoadAsync();

或者有更好的方法吗?

如果您有EF Core 5,在这些情况下,您可以随时使用即时加载

此版本总是在一个查询中加载所有内容,除非您说
.AsSplitQuery()
。然后将每个表加载到单独的查询中


但是没有更好的办法了。这取决于你的情况。

急切/懒惰与此无关,因为请求完成的确切时间仍由你决定。三个请求总是比一个请求长,所以问题是,需要链接数组的频率有多高。如果每次都需要它们,那么分割请求绝对没有意义。如果不是。。。好吧,那你需要自己来分析一下


但是性能不应该是你主要关心的问题。在一个请求中加载所有内容更简单、更容易理解。因此,我建议始终使用更简单的解决方案,即使它不是最佳性能。只有当性能太低,并且只有当分析表明错误的SQL是原因时,才开始调整和优化。扰流板:可能不会。两个选项都有代码。如果您对特定应用程序的性能感到好奇,您是否尝试过简单地对代码进行基准测试并亲自查看?这两种方法(以及代理加载)都有其优缺点,哪种更好完全取决于您的用例。谢谢。现在我将尝试基准测试并接受莫尔斯的建议。