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

时间:2016-06-29 03:11:09

标签: c# asp.net-mvc dotnetnuke dotnetnuke-module

我是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类中删除此变量会导致模块按预期工作。错误发生在rep.Get()行。

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

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

1 个答案:

答案 0 :(得分:3)

由于listModel2不是表中的实际列,因此需要在属性上方添加[IgnoreColumn]装饰器。有关详细信息,请参阅此stackoverflow问题中的答案:petapoco query a Sql Server View

相关问题