我需要创建一个附加到现有内容类型的部件。与该部分关联的模型除了项目列表之外没有变量,对应于与我创建的表中包含的数据的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方法时,我总是收到一个空列表,所以我不认为这些关系是正确构建的。