3

如何从 Orchard CMS 中的数据库中获取表数据?我是 Orchard CMS 的初学者,我不知道在 Orchard CMS 中获取和保存任何数据,因为它不像 ado.net 或 linq to sql 或实体框架等常规数据库访问模型。

4

1 回答 1

9

好的,所以我建议先阅读文档并遵循一些教程(例如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);

简单!希望这可以帮助您入门:)

编辑:

因此,要从内容项中获取部分数据,您可以使用 .As<> 例如。

var fooPart = contentItem.As<FooPart>();
var name = fooPart.Name;
于 2013-10-07T11:06:34.800 回答