好吧,这应该相当容易。
我想在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的对象?
答案 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
属性,并且该属性应标记为Identity
和PrimaryKey
表定义(如上所述)。
当您创建一个继承自*Record
的{{1}}类并设置表格时
ContentPartRecord
然后你得到SchemaBuilder.CreateTable(
"YourRecord",
table => table
.ContentPartRecord()
// more column definitions
);
属性/ PK&#34;免费&#34;通过继承并在迁移中调用Id
。
请参阅PersonRecord中的Orchard Training Demo Module,了解将标准类存储为数据库中的记录的另一个示例。