Orchard:如何坚持没有内容的记录

时间:2014-03-27 13:44:57

标签: orchardcms

好吧,这应该相当容易。

我想在Orchard(1.7.2)中为我的模块保留一些记录,而这些记录也不是ContentPartRecord。

换句话说,我希望能够在DB中保留以下对象:

public class LogItemRecord
{
    public virtual string Message { get; set; }
}

..已经映射到数据库。但请注意,此类不是从ContentPartRecord派生的,因为它肯定不是一个。

然而,当我调用IRepository实例的.Create方法时,我得到的只是一个糟糕的nHibernate异常:

没有持久性:MyModule.Models.LogItemRecord

...如果我将LogItem记录声明为从ContentPartRecord继承而消失,但试图坚持这一点,除了hacky-tacky之外,还遇到了它自己的例外,其中nHibernate再次公正地抱怨记录的Id值为零,但不是很多的话。

那么......我如何与Orchard很好地合作并使用它的API来保存我自己的不是ContentParts / ContentItems的对象?

1 个答案:

答案 0 :(得分:1)

我正在运行1.7.3(也在1.7.2中测试过)并且已经成功地将以下类保存到数据库中:

public class ContactRecord
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string JobTitle { get; set; }
    public virtual string Email { get; set; }
    public virtual string Phone { get; set; }
}

以下是Migrations.cs

的相关行
SchemaBuilder.CreateTable(
    typeof(ContactRecord).Name,
    table => table
        .Column<int>("Id", col => col.Identity().PrimaryKey())
        .Column<string>("Name")
        .Column<string>("JobTitle")
        .Column<string>("Email")
        .Column<string>("Phone")
);

我将假设您在LogItemRecord中显示的代码是完成以下声明时的完整类定义...

我认为您存储在数据库中的任何记录类都需要Id属性,并且该属性应标记为IdentityPrimaryKey表定义(如上所述)。

当您创建一个继承自*Record的{​​{1}}类并设置表格时

ContentPartRecord

然后你得到SchemaBuilder.CreateTable( "YourRecord", table => table .ContentPartRecord() // more column definitions ); 属性/ PK&#34;免费&#34;通过继承并在迁移中调用Id

请参阅PersonRecord中的Orchard Training Demo Module,了解将标准类存储为数据库中的记录的另一个示例。