在Orchard,模块开发人员如何能够了解“加入”的工作方式,特别是在加入核心部件和记录时?我见过的更好的帮助之一是Orchard documentation,但这些例子都没有显示如何与现有或核心部分形成关系。作为我正在寻找的一个例子,这里是一个模块服务代码片段,取自一个工作示例:
_contentManager
.Query<TaxonomyPart>()
.Join<RoutePartRecord>()
.Where(r => r.Title == name)
.List()
在这种情况下,自定义TaxonomyPart
正在加入核心RoutePartRecord
。我已经调查了代码,我无法看到TaxononmyPart如何“加入”到RoutePartRecord。同样,从工作代码,这里是另一个片段驱动程序代码,它将自定义TagsPart与核心CommonPartRecord相关联:
List<string> tags = new List<string> { "hello", "there" };
IContentQuery<TagsPart, TagsPartRecord> query = _cms.Query<TagsPart, TagsPartRecord>();
query.Where(tpr => tpr.Tags.Any(t => tags.Contains(t.TagRecord.TagName)));
IEnumerable<TagsPart> parts =
query.Join<CommonPartRecord>()
.Where(cpr => cpr.Id != currentItemId)
.OrderByDescending(cpr => cpr.PublishedUtc)
.Slice(part.MaxItems);
我想我可以从之前的任何一个如何形成自己的查询的例子中学习。我这样做了:
List<string> tags = new List<string> { "hello", "there" };
IContentQuery<TagsPart, TagsPartRecord> query = _cms.Query<TagsPart, TagsPartRecord>();
query.Where(tpr => tpr.Tags.Any(t => tags.Contains(t.TagRecord.TagName)));
var stuff =
query.Join<ContainerPartRecord>()
.Where(ctrPartRecord => ctrPartRecord.ContentItemRecord.ContentType.Name == "Primary")
.List();
我的代码的目的是将发现的内容项限制为仅限于特定容器(或博客)的内容项。代码运行时,它在我的连接查询中引发了一个例外{"could not resolve property: ContentType of: Orchard.Core.Containers.Models.ContainerPartRecord"}
。这导致了各种各样的问题:
CommonPartRecord
,而不是ContainerPartRecord
?一般来说,我怎么知道填充了什么部分记录,以及什么时候?models
类,发现TagsPart和CommonPartRecord之间没有固有的关系。因此,除了查看示例代码之外,首先如何知道这样的连接是合法的还是可能的? TagsPart
和ContainerPartRecord
尝试的加入是否合法?哪个?文档中似乎有一个关于这些想法和问题的漏洞,这使得编写模块变得困难。无论在这个主题上找到什么答案,我都很乐意汇编成文章或社区Orchard文档。
答案 0 :(得分:3)
至于文档中的漏洞,当然。我们今天拥有的文档仅涵盖平台的很小一部分。今天您最好的参考是源代码。您可以为此做出的任何贡献都得到我们和社区其他成员的高度赞赏。如果您需要帮助,请告诉我。