C# 如何忽略包括';什么是相关数据?
我正在用EF Core 2.0开发一个ASP.NET核心Web API 我有以下代码: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)的目的。有没有一种
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。。。虽然这是一个很好的建议,解决了我过去遇到的问题,但它并不能解决我当前的问题。所以,发布一个答案,别忘了这样做不仅仅是为了回答你的问题