Ошибка при получении модулем проекта Orchard: не сохраняется для: SomePartRecord - PullRequest
6 голосов
/ 14 февраля 2011

Я пытаюсь создать простую настройку в Orchard, которая появляется на странице настроек.Я создал модуль, который добавляет мой ContentPart на страницу настроек и правильно создает таблицу в базе данных, но каждый раз, когда файл cshtml отображается и к свойству записи обращаются, я продолжаю получать следующую запись NHibernate.

Не сохраняется для: TekFlow.Contact.TekFlowEmailSettingsPartRecord.(TekFlow.Contact - это имя модуля)

Ниже приведен весь код, который я использую для создания записи / детали / обработчика / драйвера, необходимых в Orchard.

 public class TekFlowEmailSettingsPartDriver : ContentPartDriver<TekFlowEmailSettingsPart>
{
    public TekFlowEmailSettingsPartDriver()
    {
        T = NullLocalizer.Instance;
    }

    public Localizer T { get; set; }

    protected override DriverResult Editor(TekFlowEmailSettingsPart part, dynamic shapeHelper)
    {
        return ContentShape("Parts_TekFlowEmailSettings_Edit",
            () => shapeHelper.EditorTemplate(TemplateName: "Parts.TekFlowEmailSettings", Model: part, Prefix: Prefix)
                );
    }

    protected override DriverResult Editor(TekFlowEmailSettingsPart part, Orchard.ContentManagement.IUpdateModel updater, dynamic shapeHelper)
    {
        bool success = updater.TryUpdateModel(part, Prefix, null, null);
        return Editor(part, shapeHelper);
    }
}

[UsedImplicitly]
public class TekFlowEmailSettingsPartHandler : ContentHandler
{
    public TekFlowEmailSettingsPartHandler(IRepository<TekFlowEmailSettingsPartRecord> repository)
    {
        Filters.Add(new ActivatingFilter<TekFlowEmailSettingsPart>("Site"));
        Filters.Add(StorageFilter.For(repository));
    }
}

 public class TekFlowEmailSettingsPartRecord : ContentPartRecord {
     public virtual string SendToEmail { get; set; }
}

 public class TekFlowEmailSettingsPart : ContentPart<TekFlowEmailSettingsPartRecord>
 {
     public string SendToEmail
     {
         get { return Record.SendToEmail; }
         set { Record.SendToEmail = value; }
     }
 }

 public class TekFlowEmailSettingsDataMigration : DataMigrationImpl
 {
     public int Create()
     {
         SchemaBuilder.CreateTable("TekFlowEmailSettingsPartRecord",
             table => table
                 .ContentPartRecord()
                 .Column<string>("SendToEmail", c => c.WithDefault("SomeEmail@somedomain.com").WithLength(255))
             );


         ContentDefinitionManager.AlterPartDefinition(
             typeof(TekFlowEmailSettingsPart).Name, cfg => cfg.Attachable());

         return 1;
     }
 }

Ответы [ 3 ]

14 голосов
/ 15 февраля 2011

Оказывается, что если ваша Партия и Запись не находятся в вашем пространстве имен "Модели", это не будет работать в саду.Когда я изменил Пространство имен для двух классов, это сработало.Должно быть предположение, что делает Орчард.

2 голосов
/ 27 июня 2014

Я получил ту же ошибку из-за отсутствия виртуальных переменных в моей записи. (В моем случае он не унаследовал ContentPartRecord и объявил свой собственный Id, но не уверен, что проблема в том, что Id не виртуальный или все переменные должны быть виртуальными.)

Также, как упоминалось выше, ваше пространство имен должно заканчиваться моделями или записями, как описано здесь: https://orchard.codeplex.com/discussions/267968

0 голосов
/ 15 февраля 2011

Мой модуль Favicon имеет почти одинаковую структуру, и когда я делал сравнение файлов по файлам, я не мог найти существенной разницы.Единственное, что выглядит подозрительно, это то, что вы не определили префикс в вашем драйвере.Это может повлиять на способность связующего повторно увлажнять модель, но я не уверен, как это повлияет на устойчивость.

...