Orchardcms 如何在ContentManager查询中获取自定义类型的内容?

Orchardcms 如何在ContentManager查询中获取自定义类型的内容?,orchardcms,orchardcms-1.9,Orchardcms,Orchardcms 1.9,我在迭代仅通过迁移创建的自定义类型的ContentItems集合时遇到了一些n+1性能问题 ContentDefinitionManager.AlterPartDefinition(“MyType”,part=>part .WithField(“MyField”,字段=>字段 ... ) ); ContentDefinitionManager.AlterTypeDefinition(“MyType”,type=>type .WithPart(“MyType”) ); 每次我访问此部分的字段时,

我在迭代仅通过迁移创建的自定义类型的ContentItems集合时遇到了一些n+1性能问题

ContentDefinitionManager.AlterPartDefinition(“MyType”,part=>part
.WithField(“MyField”,字段=>字段
...
)
);
ContentDefinitionManager.AlterTypeDefinition(“MyType”,type=>type
.WithPart(“MyType”)
);
每次我访问此部分的字段时,都会执行一个新的查询。我可以使用查询点来避免预定义部分出现这种情况

var myItems=\u orchardServices.ContentManager.Query().ForType(“MyType”)

.带查询点(新查询点().ExpandParts这有点奇怪,因为字段被持久化到内容项记录上,应该在第一次查询时从数据库中删除。您可以分享一个主查询的示例,以及当您请求字段值时发出的附加查询的示例吗?您可以从MiniProfiler获得它们,例如。FWIW,我已经写过t在这里使用HQL查询字段:但这应该只在筛选字段时才有必要,而不是在查询字段值时才有必要。@BertrandLeRoy我在我的文章中添加了一个示例。我还没有为探查器操心,因为我现在意识到分类字段可能是这里唯一的一个字段。啊,是的,一些关键信息丢失了,即在讨论的字段中有一个分类字段,它使用额外的表而不是内容项记录上的存储空间。因此,是的,最优雅的解决方案可能是使用HQL,但您所做的似乎是有效的。您还可以看看
termspathandler
,它对
新查询提示()做了一些有趣的事情.ExpandRecords(“ContentTypeRecord”、“CommonPartRecord”、“TermsPartRecord”)
。谢谢你的提示。这有点奇怪,因为字段被持久化到内容项记录上,在第一次查询时应该从数据库中删除。你能分享一个主查询的示例,以及当你请求字段值时发出的附加查询的示例吗?你可以从MiniProfiler获得它们,例如。FWIW,I“我在这里写过关于使用HQL查询字段的内容:但这应该只在对字段进行筛选时才有必要,而不是在查询字段值时才有必要。@BertrandLeRoy我在我的帖子中添加了一个示例。我还没有为探查器操心,因为我现在意识到分类字段可能是这里唯一的一个字段。啊,是的,一些关键信息被删除了。”缺失,即所讨论的字段是一个分类字段,它使用额外的表而不是内容项记录上的存储空间。因此,是的,最优雅的解决方案可能是使用HQL,但您所做的似乎是有效的。您还可以查看
Termspathandler
,它对
做了一些有趣的事情>新建QueryHints().ExpandRecords(“ContentTypeRecord”、“CommonPartRecord”、“TermsPartRecord”);
。感谢您的提示。