Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 如何忽略包括';什么是相关数据?_C#_Entity Framework Core - Fatal编程技术网

C# 如何忽略包括';什么是相关数据?

C# 如何忽略包括';什么是相关数据?,c#,entity-framework-core,C#,Entity Framework Core,我正在用EF Core 2.0开发一个ASP.NET核心Web API 我有以下代码: return _context.Pessoas .Include(x => x.ListasXPessoas).ThenInclude(l => l.Lista) .Take(100); Pessoas和Listas具有多对多关系,ListasXPessoas是联接表 我不想返回Listas实体的相关数据,因为它循环回到Pessoas。它违背了Take(100)的目的。有没有一种

我正在用EF Core 2.0开发一个ASP.NET核心Web API

我有以下代码:

return _context.Pessoas
    .Include(x => x.ListasXPessoas).ThenInclude(l => l.Lista)
    .Take(100);
Pessoas和Listas具有多对多关系,ListasXPessoas是联接表


我不想返回Listas实体的相关数据,因为它循环回到Pessoas。它违背了
Take(100)
的目的。有没有一种方法可以关闭这种行为,或者执行SQL命令是唯一的方法?

问题不在于包含,我认为递归引用不会影响性能,除非对它们进行循环。问题是,当您序列化为json时,您将陷入无休止的循环

告诉json格式化程序忽略递归引用:

services.AddMvcCore()
        .AddJsonFormatters(opt => opt.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

您可以通过不将其添加到LINQ来忽略它。为什么不
Include(x=>x.ListasXPessoas).Take(100)我想加载Listas数据(在ThenIncludes中)。。。问题是,我想在这里停下来。EF正在加载与Listas相关的数据,即再次加载ListasXPessoas,一直加载到Pessoas。因此,我得到的JSON类似于Pessoas/ListasXPessoas/ListasXPessoas/Pessoas.Hmm,我想这很正常。它只是引用回它的父对象。调试您的查询并确保它不会做任何奇怪的事情。你是否担心EF在记忆中的内容?另外,请记住,在您执行
Take()
之前,它实际上不会运行查询,因此您也可以在
Take()
代码运行之前执行
Select()
语句。我只是想改变它的行为。问题是我有150000个比索元素。。。我只选前100名,但当ThenInclude引用回它的父对象时,正如您所说,我最终得到了50000多行JSON。我非常确定您需要删除那些
Include()。ThenInclude()
,并使用
Select
和匿名类型/DTOAlready。。。虽然这是一个很好的建议,解决了我过去遇到的问题,但它并不能解决我当前的问题。所以,发布一个答案,别忘了这样做不仅仅是为了回答你的问题