我是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类的其他属性一样?
答案 0 :(得分:3)
由于listModel2不是表中的实际列,因此需要在属性上方添加[IgnoreColumn]装饰器。有关详细信息,请参阅此stackoverflow问题中的答案:petapoco query a Sql Server View