为填充数据建立一对多关系
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
我是 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