c# – Orchard项目模块获取错误:没有持久性:SomePartRecord

我正在尝试在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;
     }
 }

解决方法

事实证明,如果您的Part和Record不在您的“Models”命名空间中,那么它将无法在果园中运行.当我更改两个类的命名空间时,它工作.必须是Orchard正在做的假设.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...