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

本文关键字:填充 关系 数据 一对多 建立 | 更新日期: 2023-09-27 17:53:05

我是新的MVC,所以这可能是基本的,我需要一些指针。我开始从克里斯哈蒙德的模块模板DNN8 MVC构建模块。模板具有用于操作单个模型的代码。我希望有两个模型,它们之间有一对多的关系,并且两者同时被填充。

Model1:

[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; }
}

Model2:

[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;
}

我得到一个运行时错误:无效的columnname listModel2。从Model1类中删除这个变量会使模块按预期工作。错误在rep.Get()行。

我认为我需要以某种方式建立Model1和Model2是一对多关系的两个实体,并且listModel2不是数据库中的列,而是一个需要基于Model1Id外键关系填充的单独表。我怎么做呢?

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

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

由于listModel2不是表中的实际列,因此需要在该属性上方添加[IgnoreColumn]装饰器。查看我的答案在这个stackoverflow问题的更多细节:petapoco查询Sql Server视图