为填充数据建立一对多关系

Establish one-to-many relation for populating data

我是 MVC 的新手,所以这可能是基础知识,我需要一些指导。 我开始从 Chris Hammond 的 DNN8 MVC 模块模板构建模块。该模板包含用于操作单个模型的代码。我想要两个模型和它们之间的一对多关系,并且它们同时被填充。

型号 1:

[TableName("Model1")]
[PrimaryKey("Model1Id", AutoIncrement = true)]
[Cacheable("Models", CacheItemPriority.Default, 20)]
[Scope("ModuleId")]
public class Model1
{
    public Model1()
    {
        listModel2 = new System.Collections.Generic.List<Model2>();
    }
    public int Model1Id { get; set; } = -1;
    public string Model1Name { get; set; }
    public int ModuleId { get; set; }
    public virtual System.Collections.Generic.List<Model2> listModel2 { get; set; }
}

模型 2:

[TableName("Model2")]
[PrimaryKey("Model2Id", AutoIncrement = true)]
[Scope("Model1Id")]
public class Model2
{
    public int Model2Id { get; set; }            
    public int Model1Id { get; set; }
    public virtual Model1 Model1 { get; set; }    
}

下面是使用 DNN 提供的功能填充数据的代码。我只是修改了一下,还是按照模板说明的基本原则。

public Model1 GetModel1(int moduleId)
{
    Model1 m;
    using (IDataContext ctx = DataContext.Instance())
    {
        var rep = ctx.GetRepository<Model1>();
        m = rep.Get().Where<Model1>(l => l.ModuleId == moduleId).FirstOrDefault();
    }
    return m;
}

我收到运行时错误:列名 listModel2 无效。从 Model1 class 中删除此变量会导致模块按预期工作。错误在 rep.Get() 行。

我认为我需要以某种方式确定 Model1 和 Model2 是一对多关系的两个实体,并且 listModel2 不是数据库中的列,而是一个单独的 table根据 Model1Id 外键关系进行填充。我怎么做?

换句话说,在不编写数据访问代码的情况下填充 listModel2 集合的最佳方法是什么 - 就像填充 Model1 class 的其他属性一样?

由于 listModel2 不是 table 中的实际列,您需要在属性上方添加 [IgnoreColumn] 装饰器。有关详细信息,请参阅我在这个 Whosebug 问题中的回答:petapoco query a Sql Server View