好的,所以我建议首先阅读文档并遵循一些教程(例如http://www.ideliverable.com/blog/writing-an-orchard-webshop-module-from-scratch-part-1 http://www.ideliverable.com/blog/writing-an-orchard-webshop-module-from-scratch-part-1)。至少我发现 Orchard 有点难以跳进去,不得不慢慢涉水,阅读所有相关材料。一旦您对到底发生了什么有了一些了解,掌握 Orchard 复杂性的最佳资源就是在 Orchards 源代码中查找示例。
无论如何,您在这里讨论的是两个不同的事情,访问 Orchard 内容项和访问您自己在 Orchard 中的表。两者都比较简单。 Orchard 有很多很好的辅助方法可以做到这一点。要访问 Orchard 内容,您需要使用 Orchard 内容管理器。
private readonly IOrchardServices services;
public AdminController(IOrchardServices services) {
this.services = services;
}
现在我们的控制器中已经有了 OrchardServices,并且可以像这样使用它......
var contentId = 12;
var contentItem = this.services.ContentManager.Get(contentId);
这将从指定的 id 获取内容项。假设您想获取包含名为 MyPart 的部分的所有内容项,您可以这样做:
var items = this.services.ContentManager.Query<MyPart>().List();
它有很多其他方法来创建内容等。现在,为了查询您自己的表,您可以使用存储库。假设您有一个名为 FooRecord 的模型,您可以执行此操作。
private readonly IRepository<FooRecord> fooRepository;
public AdminController(IRepository<FooRecord> fooRepository) {
this.fooRepository = fooRepository;
}
您可以使用 linq 表达式来查询它,如下所示:
var foo = fooRepository.Fetch(x => x.Id == fooId).FirstOrDefault();
要创建记录,您可以...
var record = new FooRecord() { FooName = "Bob" };
this.fooRepository.Create(record);
简单!希望这可以帮助您入门:)
EDIT:
因此,要从内容项获取部分数据,您可以使用 .As 例如。
var fooPart = contentItem.As<FooPart>();
var name = fooPart.Name;