Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Asp.net core 实体框架核心不';t加载一些相关对象_Asp.net Core_Ef Core 2.2 - Fatal编程技术网

Asp.net core 实体框架核心不';t加载一些相关对象

Asp.net core 实体框架核心不';t加载一些相关对象,asp.net-core,ef-core-2.2,Asp.net Core,Ef Core 2.2,我正在从事基于ASP.NET核心和实体框架核心的项目。 我在这里使用通用存储库模式。当我在特定对象上检索时,很少使用相同的对象检索对象,但有些对象没有加载。请参考以下屏幕截图 有关模式实现,请参考以下内容: 请参阅下面的调试器视图: 上图显示此对象检索“Offer”而不是“Location” 有关“OfferLocation”类,请参阅下图: 对这种情况有什么想法吗?你只需要使用这个软件包 Microsoft.EntityFrameworkCore.Proxies 在上下文中使用这行代码

我正在从事基于ASP.NET核心和实体框架核心的项目。 我在这里使用通用存储库模式。当我在特定对象上检索时,很少使用相同的对象检索对象,但有些对象没有加载。请参考以下屏幕截图

有关模式实现,请参考以下内容:

请参阅下面的调试器视图:

上图显示此对象检索“Offer”而不是“Location”

有关“OfferLocation”类,请参阅下图:


对这种情况有什么想法吗?

你只需要使用这个软件包

Microsoft.EntityFrameworkCore.Proxies

在上下文中使用这行代码

protected override void OnConfiguring (DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseLazyLoadingProxies ();
}

当您使用其他收藏时,此软件包将自动包含。

在您的代码中,您正在请求
提供
,并告诉EF.Core包含
提供定位
属性。
OfferLocation
引用了请求的
Offer
对象,这就是它被设置的原因。如果您想将
位置
包含在此请求中,您必须在
包含
方法之后立即使用
然后包含
方法。例如,如果您使用数据库上下文检索数据,它可能如下所示:

context.Offers
.包括(o=>o.OfferLocations)
.然后包括(ol=>ol.Location)
.FirstOrDefaultAsync(o=>o.Id==Id);
但是使用通用存储库方法,您可以将包含表达式的集合作为
表达式[]includeExpression
传递,这显然不允许您使用
然后include

您可以使用本文中描述的方法

public Task FirstOrDefaultAsync(表达式谓词=null,
Func include=null,
CancellationToken CancellationToken=默认值)
{
IQueryable query=this.DbSet;
如果(包括!=null)
{
查询=包括(查询);
}
if(谓词!=null)
{
query=query.Where(谓词);
}
返回query.FirstOrDefaultAsync(cancellationToken);
}
用法:

var offer=等待this.unitOfWork.Offers.FirstOrDefaultAsync(
谓词:o=>o.Id==Id,
include:source=>source
.包括(o=>o.Partner)
.包括(o=>o.子类别)
.包括(o=>o.Category)
.包括(o=>o.OfferItems)
.包括(o=>o.OfficeLocations)
。然后包括(ol=>ol.Location));

要了解如何使用go to link(如屏幕截图所示),它会加载此集合中的一个对象(提供),但不会加载“位置”对象。请不要发布代码和错误的图像,而是发布文本。