如何从Orchard CMS中的数据库中获取表数据?

Avi*_*jan 3 content-management-system orchardcms

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

Haz*_*zza 9

好的,所以我建议您先阅读文档并阅读一些教程(例如http://www.ideliverable.com/blog/writing-an-orchard-webshop-module-from-scratch-part-1).我至少发现Orchard有点难以进入并且不得不慢慢地涉水,阅读所有相关资料.一旦你对将要发生的事情有了一些了解,掌握Orchard的复杂性的最佳资源就是在Orchards源代码中寻找示例.

无论如何,你在这里谈论两件不同的事情,访问Orchard内容项目并访问Orchard中自己的表格.两者都比较简单.Orchard有很多很好的帮助方法.要访问Orchard内容,您需要使用果园内容管理器.

private readonly IOrchardServices services;

public AdminController(IOrchardServices services) {
   this.services = services;
}
Run Code Online (Sandbox Code Playgroud)

所以我们现在在我们的控制器中有OrchardServices,可以像这样使用它...

var contentId = 12;
var contentItem = this.services.ContentManager.Get(contentId);
Run Code Online (Sandbox Code Playgroud)

这将从指定的id获取内容项.假设您想要使用名为MyPart的部件获取所有内容项,您可以这样做:

var items = this.services.ContentManager.Query<MyPart>().List();
Run Code Online (Sandbox Code Playgroud)

它有许多其他创建内容的方法等.现在,您可以使用存储库来查询自己的表.所以说你有一个名为FooRecord的模型,你可以这样做.

private readonly IRepository<FooRecord> fooRepository;

public AdminController(IRepository<FooRecord> fooRepository) {
   this.fooRepository = fooRepository;
}
Run Code Online (Sandbox Code Playgroud)

你可以使用像这样的linq表达式查询它:

var foo = fooRepository.Fetch(x => x.Id == fooId).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

要创建记录,你可以做...

var record = new FooRecord() { FooName = "Bob" };
this.fooRepository.Create(record);
Run Code Online (Sandbox Code Playgroud)

Simples!希望这有助于你开始:)

编辑:

因此,要从您可以使用的内容项中获取零件数据.如<>,例如.

var fooPart = contentItem.As<FooPart>();
var name = fooPart.Name;
Run Code Online (Sandbox Code Playgroud)