Как переопределить имя таблицы записей для доступа к существующим данным в Orchard CMS

Мне нужно получить доступ к данным из уже существующих таблиц. Я начал работать над созданием модуля для отображения данных и т. д. Однако Orchard добавляет к табличным командам префикс «Table_Prefix» и «Module Name».

Могу ли я каким-либо образом указать, к какой таблице привязать модель, чтобы я мог использовать существующий IRepository?

Я пытаюсь избежать изменения основного кода или реализовать свой собственный IRepository (что, как мне кажется, мне придется сделать).

Заранее спасибо.


person Jeb746966    schedule 11.08.2011    source источник
comment
Не могли бы вы быть немного более конкретным? К каким табличным данным вы хотите получить доступ и почему? Orchard сделан таким образом, что вам даже не нужно знать, что внизу есть таблица SQL для большинства применений, и предоставляет службы для доступа к большинству содержимого как объекты CLR, а не как строки таблицы.   -  person Falanwe    schedule 11.08.2011
comment
Как указано в вопросе, мне нужно получить доступ к существующим данным. Я ценю, что работаю через ORM. Взглянув на исходный код, я вижу, что привязка выполняется с помощью автокарты Fluent NHibernate!, которая работает по соглашению. Я нашел еще один аналогичный вопрос на форуме Orchard, в котором говорится, что единственный способ - создать DAL для внешних данных.   -  person Jeb746966    schedule 12.08.2011


Ответы (2)


Вы можете создать собственное соглашение об именовании таблиц (чтобы оно соответствовало вашему текущему именованию), изменив основной код тремя способами:

  1. Сопоставление имени записи создается в методе BuildRecord класса CompositionStrategy (Orchard.Framework/Environment/ShellBuilders/CompositionStrategy), поэтому вы можете просто изменить код здесь.
  2. Путем изменения метода Apply класса Orchard.Data.Conventions.RecordTableNameConvention. Именно здесь сопоставления имен таблиц записей (встроенные в пункте 1.) передаются в NHibernate.
  3. Создайте собственную реализацию FluentNHibernate.Conventions.IClassConvention (аналогичную RecordTableNameConvention, упомянутой выше, и замените ей реализацию по умолчанию, используемую AutoMap в методе CreatePersistenceModel(...) Orchard.Data.Providers.AbstractDataServicesProvider.

Вы также можете создать свою собственную реализацию IDataServicesProvider, но это, безусловно, будет излишним, если вам нужно только изменить соглашение об именах таблиц.

person Piotr Szmyd    schedule 04.09.2011
comment
Спасибо за ответ. В конце концов я использовал свой собственный репозиторий, потому что имел дело с таблицами с соглашением об именах, отличным от того, которое использовалось в части автоматического сопоставления Orchard. Однако мне может понадобиться использовать этот подход в другом проекте, который я могу делать в Orchard. - person Jeb746966; 07.09.2011

Я модифицировал CompositionStrategy и обнаружил, что вам нужно изменить следующие

<сильный>1. SetupService.cs (Modules\Orchard.Setup\Services):

Таблицы, жестко закодированные в методе Setup, — это «Orchard_Framework_DataMigrationRecord» и «Settings_ShellDescriptorRecord».

<сильный>2. InfosetController.cs (Modules\Upgrade\Controllers):

В этом классе жестко запрограммировано несколько таблиц, которые необходимо обновить.

<сильный>3. DataMigrationManager.cs (Данные\Миграция):

Замените параметры SchemaBuilder на конструктор.

person Bon    schedule 08.04.2015