Как получить данные таблицы из базы данных в Orchard CMS?

Как получить данные таблицы из базы данных в Orchard CMS? Я новичок в Orchard CMS, я не знаю, чтобы получать и сохранять какие-либо данные в Orchard CMS, потому что это не похоже на обычную модель доступа к базе данных, такую ​​как ado.net или linq to sql или фреймворк сущностей.

1 ответ

Решение

Итак, я бы порекомендовал начать с чтения документов и следования некоторым учебникам (например, http://www.ideliverable.com/blog/writing-an-orchard-webshop-module-from-scratch-part-1). По крайней мере, я обнаружил, что Орчарду трудно прыгнуть, и мне приходилось медленно заходить, читая все соответствующие материалы. Если у вас есть представление о том, что, черт возьми, происходит, лучший ресурс, чтобы разобраться в тонкостях Orchard, - это искать примеры в исходном коде Orchards.

В любом случае, здесь вы говорите о двух разных вещах: доступ к элементам содержимого 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);

Это позволит получить элемент контента с указанным идентификатором. Скажем, если вы хотите получить все элементы контента с частью под названием 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);

Simples! Надеюсь, это поможет вам начать:)

РЕДАКТИРОВАТЬ:

Таким образом, чтобы получить данные детали из элемента контента, вы можете использовать.As<> Например.

var fooPart = contentItem.As<FooPart>();
var name = fooPart.Name;
Другие вопросы по тегам