Orchard 1.8 - 创建对应于1-n关系的零件

时间:2015-03-19 15:17:30

标签: c# model orchardcms relationship orchardcms-1.8

我需要创建一个附加到现有内容类型的部件。与该部分关联的模型除了项目列表之外没有变量,对应于与我创建的表中包含的数据的1-N关系。如果我使用Record方法,创建一个仅包含列表的Model,它将生成一个“假”表,除了Id之外没有其他数据。这是当前的代码:

**Model**
public class MyPartRecord : ContentPartRecord
{ public virtual IList<OtherRecord> MyList { get; set; } }

public class MyPart : ContentPart<MyPartRecord>
{
    public IList<OtherRecord> MyList {
        get { return Record.MyList; }
}

public class OtherRecord
{
    public virtual string Var1 { get; set; }
    public virtual int Var2 { get; set; }
}

**Migration**
SchemaBuilder.CreateTable("MyPartRecord", table => table
            .ContentPartRecord());

SchemaBuilder.CreateTable("OtherRecord", table => table
            .Column<int>("Id", column => column.PrimaryKey().Identity())
            .Column<string>("Var1")
            .Column<int>("Var2")
            .Column<int>("MyPartRecord_Id")
            );

我不相信这种方法,所以我想知道我是否可以仅使用Infoset方法创建1-N关系,并且无需在迁移中创建“假”表,或者如果使用Record方法有一些更聪明的方法。

更新

我尝试使用信息集方法但我无法使其工作。我改变了我的文件:

**Model**
public class MyPart : ContentPart
{
    public IList<OtherRecord> MyList {
        get { return this.Retrieve(x => x.MyList, new List<OtherRecord>()); }
}

**Migration**
SchemaBuilder.CreateTable("OtherRecord", table => table
            .Column<int>("Id", column => column.PrimaryKey().Identity())
            .Column<string>("Var1")
            .Column<int>("Var2")
            .Column<int>("MyPart_Id")
            );

但是当驱动程序调用get方法时,我总是收到一个空列表,所以我不认为这些关系是正确构建的。

0 个答案:

没有答案