Пользовательский модуль Orchard - Модель выбирается NHibernate - Требуются виртуальные свойства - PullRequest
2 голосов
/ 20 октября 2011

Я работаю над созданием пользовательского модуля в Orchard CMS, и у меня есть следующее действие контроллера:

public ActionResult Inventory()
{
   var models = _repository.Get<MyModel>();
   return View(new MyViewModel() { MyModels = models.ToList() });
}

Теперь, когда Orchard строит это, возникает исключение, потому что NHibernate поднял MyModelпотому что он рассматривается как PartRecord, и я не хочу, чтобы это было.

Исключение составляет метод get_Id, который должен быть 'public / protected virtual' или 'protected internal virtual'.

Я могу добавить виртуальные свойства, но я хочу, чтобы NHibernate не участвовал в просмотре этого объекта, это не нужно.

Мой вопрос: как я могу добавить модель, получить доступ к этой модели в виде и запретить Орчарду рассматривать ее как PartRecord?Я фактически использую модель в отдельном репозитории, отдельном от БД Orchard.

РЕДАКТИРОВАТЬ: Дополнительная информация

_repository - это IDbRepository, указывая на мой собственный экземпляр БД. MyModel - это POCO для моих данных.,Я стараюсь не использовать виртуальные свойства в MyModel, они у меня есть здесь, чтобы проиллюстрировать, где я пытаюсь их избежать.

public interface IDbRepository : IDependency
{
    T Find<T>(long id) where T : class, IActiveRecord;
    bool Update<T>(T record) where T : class, IActiveRecord;
    bool Remove<T>(T record) where T : class, IActiveRecord;
}

public class MyModel : IActiveRecord
{
    [Key]
    public virtual long Id { get; set; }
    public virtual int SupplierProductId { get; set; }
    public virtual int SupplierId { get; set; }
    public virtual int ProductId { get; set; }
}

В дополнение к этому, у моего модуля есть настройкисозданная мной часть хранится в Orchard DB и редактируется в настройках сайта.Я использую обработчик для управления этим.Однако я попытался удалить обработчик и несколько других вещей, чтобы Орчард не смог перенести мой объект в NHibernate.

1 Ответ

8 голосов
/ 22 октября 2011

В конфигурации автоматического сопоставления Orchard предполагается, что любой класс будет сопоставлен, если выполнены следующие условия:

  • пространство имен заканчивается символами ".Models" или ".Records"
  • существует свойство Id, с виртуальными средствами доступа
  • класс не является ни запечатанным, ни абстрактным
  • класс не реализует IContent или наследуется от ContentPartRecord

Так что, если вы препятствуете тому, чтобы какой-либо из этих критериев был правдой, вы должны быть хорошими.Например, достаточно указать классы в пространстве имен, не заканчивающемся .Models или .Records.

...