6

我正在尝试在设置页面中显示的 Orchard 中创建一个简单的设置。我创建了一个模块,它将我的 ContentPart 添加到设置页面,并在数据库中正确创建了一个表,但是每次呈现 cshtml 文件并访问记录的属性时,我都会不断获得以下 NHibernate 记录。

没有持久性:TekFlow.Contact.TekFlowEmailSettingsPartRecord。(TekFlow.Contact 是模块名称)

下面是我用来创建 Orchard 中所需的 Record/Part/Handler/Driver 的所有代码。

 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;
     }
 }
4

3 回答 3

14

事实证明,如果您的 Part 和 Record 不在您的“模型”命名空间中,那么这将无法在果园中使用。当我更改两个类的命名空间时,它起作用了。一定是 Orchard 所做的假设。

于 2011-02-15T18:57:53.530 回答
2

由于我的记录中没有虚拟变量,我得到了同样的错误。(在我的情况下,它没有继承 ContentPartRecord 并声明它自己的 Id,不确定问题是否仅仅是 Id 不是虚拟的或者所有变量都必须是虚拟的。)

同样如上所述,您的命名空间必须以模型或记录结尾,如下所述: https ://orchard.codeplex.com/discussions/267968

于 2014-06-27T07:48:37.650 回答
0

我的 Favicon 模块具有几乎相同的结构,当我逐个文件进行比较时,我找不到显着差异。唯一看起来可疑的是您没有在驱动程序中定义前缀。这可能会干扰粘合剂重新水合模型的能力,但我不确定这会如何影响持久性。

于 2011-02-14T23:06:10.650 回答